我有一个从JSON对象创建的模型,该对象具有绑定到UI的许多属性(首选项面板)。我想允许用户更新他们的首选项,但我还需要一种方法让他们在对UI进行更改后将其更改还原到模型。
我看到许多使用Ember-Data的例子,但我们没有使用它;我也没有在Ember文档中看到任何明显的模式/方法。是否有一种常用模式可以在没有Ember-Data的模型上实现“回滚”?
答案 0 :(得分:2)
这实际上取决于模型的结构。我编写了自己的Ember持久性库,并使每个属性都成为计算属性(如Ember-Data)。从那里开始,我在每个模型中都有两个哈希值oldProperties
和newProperties
。我使用两个串联来读取,只写入newProperties
。这样我就可以在必要时恢复到oldProperties
。
底线是Ember本身不会为您存储旧的属性值。您将编写自己的自定义逻辑来存储旧值并在需要时恢复它们。
答案 1 :(得分:0)
对我有用的东西是克隆模型,然后如果用户取消编辑则恢复为克隆版本。
在路线
listEditController.set('clonedModelContent', Ember.copy(modelContent));
然后在控制器的取消操作中:
close: function () {
Ember.setProperties(@get('model'), @get('clonedModelContent'));
// navigate somewhere else
}
如果您不想修改模型直到更改被“接受”,则可以恢复模式。在这种情况下,您将克隆设置为控制器的属性,当您保存时,然后复制属性并取消将简单地导航,基本上丢弃克隆对象中的更改。
希望这会有所帮助。
答案 2 :(得分:0)
我喜欢在模型上使用rollbackAttributes()方法。
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
cancelEdit: function() {
var model = this.get('objectBeingEdited');
model.rollbackAttributes();
this.toggleProperty('isEditing');
}
}
});