Ign*_*nas 12 javascript undo ember.js
编辑:我已经在GitHub上创建了自己的实现
我想知道,ember中是否有内置功能可以保存对象/数组的状态?在我们的应用程序中,我们为特定的Ember.ArrayController构建了自己的撤消/历史记录实现,但它似乎是错误和缓慢的(在Firefox中).所以我想知道是否有什么可以取代我们的脚本.
基本上我们使用它:用户添加,编辑,修改该数组中的元素,有时他们想撤消/重做他们的更改.目前我们将状态数量限制为30(可能不是最佳数量).
任何想法/链接表示赞赏!
pan*_*atz 12
我已经实现了一个mixin"Memento",它跟踪mementoProperties数组中定义的属性的变化.它支持普通属性和数组属性.
基本思想如下:当mixin初始化时,它将自身注册为属性更改的观察者.属性更改会向memento数组添加一个新项,该项表示所做更改的历史记录.调用undo将属性设置为更改之前的状态.redo分别重置该值.
该混入在GitHub上托管烬,纪念品.它可以如下使用,请参阅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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |