在没有Ember-Data的情况下还原模型更改

时间:2014-02-25 13:22:53

标签: json user-interface ember.js ember-data

我有一个从JSON对象创建的模型,该对象具有绑定到UI的许多属性(首选项面板)。我想允许用户更新他们的首选项,但我还需要一种方法让他们在对UI进行更改后将其更改还原到模型。

我看到许多使用Ember-Data的例子,但我们没有使用它;我也没有在Ember文档中看到任何明显的模式/方法。是否有一种常用模式可以在没有Ember-Data的模型上实现“回滚”?

3 个答案:

答案 0 :(得分:2)

这实际上取决于模型的结构。我编写了自己的Ember持久性库,并使每个属性都成为计算属性(如Ember-Data)。从那里开始,我在每个模型中都有两个哈希值oldPropertiesnewProperties。我使用两个串联来读取,只写入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');
        }
    }
});