我有一個從具有綁定到UI(首選項面板)的許多屬性的JSON對象創建的模型。我希望允許用戶更新他們的偏好,但我還需要一種方法讓他們在對UI進行更改後恢復對模型的更改。我看到很多使用Ember-Data的例子,但我們沒有使用它;我也沒有在Ember文檔中看到任何明顯的模式/方法。在沒有Ember-Data的模型中是否有常用的模式來實現「回滾」?在沒有Ember-Data的情況下恢復模型更改
3
A
回答
2
這真的取決於您的模型的結構。我編寫了自己的Ember持久性庫,並讓每個屬性都有一個計算屬性(如Ember-Data)。從那裏,我在每個模型中有兩個哈希,分別爲oldProperties
和newProperties
。我使用這兩個串聯閱讀,並只寫入newProperties
。這樣我可以隨時恢復到oldProperties
,如果有必要。
底線是Ember本身不會爲您存儲舊的屬性值。您將編寫自己的自定義邏輯來存儲舊值並在需要時進行恢復。
0
對我而言,有效的方法是克隆模型,然後在用戶取消編輯時恢復到克隆版本。
在路線
listEditController.set('clonedModelContent', Ember.copy(modelContent));
然後在控制器的取消行動:
close: function() {
Ember.setProperties(@get('model'), @get('clonedModelContent'));
// navigate somewhere else
}
模式可能的情況下,被還原您不想修改模型直到更改「接受」。在這種情況下,您可以將克隆設置爲控制器的屬性,並且在保存時複製這些屬性,取消將簡單地離開,基本上放棄克隆對象中的更改。
希望這會有所幫助。
0
我喜歡在模型上使用rollbackAttributes()方法。
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
cancelEdit: function() {
var model = this.get('objectBeingEdited');
model.rollbackAttributes();
this.toggleProperty('isEditing');
}
}
});
+0
這是一個特定於燼數據的函數,因爲我們沒有使用DS,所以它不適用於我們。 – Geoff
相關問題
- 1. 在不更改模式的情況下恢復遷移
- 2. 在我的情況恢復更改
- 3. EmberData模型定義更改
- 4. 在不更改數據庫的情況下更改模型?
- 5. 如何在沒有Visual Studio的情況下恢復nuget包?
- 6. 如何在沒有備份的情況下恢復postgresql DB
- 7. 在沒有RVM的情況下恢復到Ruby 2.0.0
- 8. 在沒有pg dump的情況下恢復Postgres數據庫?
- 9. 表達型「()」是模糊的沒有更多的情況下
- 10. 沒有JavaScript的情況下恢復webapps進度
- 11. iPhone備份和恢復不恢復在極少數情況下
- 12. 在沒有Pry的情況下查看Rails concole中的模型
- 13. 如何在沒有標籤的情況下更改childNodes的innerHTML?
- 14. 在沒有onClickListener的情況下更改ListView中的TextView值Android
- 15. 在不更改模式的情況下更改班級
- 16. 如何在沒有three.js的情況下渲染OBJ模型 - WebGL
- 17. 如何在沒有ng模型的情況下使用ng-change
- 18. 在沒有模型的情況下處理參數
- 19. Ember數據:在沒有商店的情況下創建模型
- 20. 如何在沒有ActiveRecord的情況下創建模型?
- 21. 在沒有MVC應用程序的情況下使用模型
- 22. 在沒有模型的情況下驗證文本框
- 23. 在沒有命令行的情況下部署Hyperledger Fabric模型
- 24. 如何在沒有主鍵的情況下創建模型
- 25. Rails 3在沒有模型的情況下形成驗證
- 26. 如何在沒有VB的情況下製作模型截圖
- 27. 在沒有模型的情況下實現MVC架構
- 28. 是否可以在沒有備份的情況下在postgres中恢復表
- 29. 在沒有JavaScript的情況下更改元素樣式
- 30. 如何在沒有iOS7動畫的情況下更改barTintColor?
我結束了與類似的解決方案。我將我的Singleton模型標記爲Freezable和Copyable。然後在初始化時創建模型的兩個實例;一個是Singleton返回的正常實例,另一個是原始值(或保存成功後的值)。我還向觀察者添加了感興趣的屬性並追蹤他們是否改變。如果我需要撤消未保存的更改,則可以調用revert()方法來僅複製已更改的屬性。 – Geoff
這很聰明。我永遠不會想到凍結對象。真高興你做到了。 – GJK