gpt4 book ai didi

javascript - EmberJS 历史/撤消

转载 作者:可可西里 更新时间:2023-11-01 02:07:19 26 4
gpt4 key购买 nike

编辑:我在 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

关于javascript - EmberJS 历史/撤消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10552360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com