我有一个从具有绑定到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