编辑:我在GitHub 上做了我自己的实现
我想知道,ember 中是否有允许保存对象/数组状态的内置功能?在我们的应用程序中,我们为特定的 Ember.ArrayController 构建了自己的撤消/历史实现,但它似乎有问题且速度慢(在 Firefox 中)。所以我想知道是否有任何东西可以取代我们的脚本。
基本上我们使用它的目的:用户添加、编辑、修改该数组中的元素,有时他们想要撤消/重做他们的更改。目前我们将状态数量限制为 30(可能不是最佳数量)。
任何想法/链接表示赞赏!
编辑:我在GitHub 上做了我自己的实现
我想知道,ember 中是否有允许保存对象/数组状态的内置功能?在我们的应用程序中,我们为特定的 Ember.ArrayController 构建了自己的撤消/历史实现,但它似乎有问题且速度慢(在 Firefox 中)。所以我想知道是否有任何东西可以取代我们的脚本。
基本上我们使用它的目的:用户添加、编辑、修改该数组中的元素,有时他们想要撤消/重做他们的更改。目前我们将状态数量限制为 30(可能不是最佳数量)。
任何想法/链接表示赞赏!
我已经实现了一个 mixin “Memento”,它跟踪mementoProperties
数组中定义的属性的变化。它支持普通属性以及数组属性。
基本思想如下:当 mixin 被初始化时,它将自己注册为属性变化的观察者。属性更改会向memento
数组中添加一个新项目,该项目表示所做更改的历史记录。调用undo
将属性设置为更改之前的状态。redo
分别重置该值。
mixin托管在 GitHub 的ember -memento上。可以按如下方式使用,参见http://jsfiddle.net/pangratz666/9fa95/:
App.obj = Ember.Object.create(Ember.Memento, {
name: 'hello',
myArray: [],
age: 12,
mementoProperties: 'name age myArray'.w()
});
App.obj.get('myArray').pushObject(1);
App.obj.get('myArray').pushObject(2);
App.obj.get('myArray').pushObject(3);
App.obj.set('name', 'hubert');
App.obj.get('myArray').pushObject(4);
App.obj.set('age', 190);
App.obj.get('myArray').pushObjects(['a', 'b']);
App.obj.undo(); // myArray = [1,2,3,4]
App.obj.undo(); // age = 12
App.obj.undo(); // myArray = [1,2,3]
App.obj.undo(); // name = 'hello'
App.obj.redo(); // name = 'hubert'
App.obj.redo(); // myArray = [1,2,3,4]
App.obj.redo(); // age = 190