找出在Ember ArrayController中哪个单独的项目发生了变化
Find out which individual item changed in an Ember ArrayController
在一个Ember.ArrayController
中,我有一个函数.observes()
用于属性更改的模型的整个数组上的属性。
var FoosController = Ember.ArrayController.extend(Ember.Evented, {
observesEachFooBar: function() {
var foos = this.get('model');
foos.forEach(function(foo) {
//test if this foo has changed, then do something
});
}.observes('model.@each.bar'),
});
在这里,我手动测试其模型中的每个Foo
。我怎样才能避免这样做,只给个人一个(或几个)?改变了吗?
Ember在SortableMixin中做到了这一点。您可以遵循相同的模式。
https://github.com/emberjs/ember.js/blob/v1.6.1/packages_es6/ember-runtime/lib/mixins/sortable.js L247
forEach(sortProperties, function(sortProperty) {
addObserver(item, sortProperty, this, 'contentItemSortPropertyDidChange');
}, this);
}, this);
}
return this._super(array, idx, removedCount, addedCount);
},
insertItemSorted: function(item) {
var arrangedContent = get(this, 'arrangedContent');
var length = get(arrangedContent, 'length');
var idx = this._binarySearch(item, 0, length);
arrangedContent.insertAt(idx, item);
},
contentItemSortPropertyDidChange: function(item) {
var arrangedContent = get(this, 'arrangedContent'),
oldIndex = arrangedContent.indexOf(item),
leftItem = arrangedContent.objectAt(oldIndex - 1),
rightItem = arrangedContent.objectAt(oldIndex + 1),
leftResult = leftItem && this.orderBy(item, leftItem),
rightResult = rightItem && this.orderBy(item, rightItem);
if (leftResult < 0 || rightResult > 0) {
arrangedContent.removeObject(item);
this.insertItemSorted(item);
}
},
这里是一个使用addArrayObserver
方法的示例,以及arrayContentWillChange
和arrayContentDidChange
。
App.IndexController = Em.ArrayController.extend({
initializer: function() {
this.addArrayObserver({
arrayWillChange: Em.K,
arrayDidChange: function(observedObj, start, removeCount, addCount) {
if(!removeCount && !addCount) {
alert('Array item at ' +start+ ' updated');
}
}
});
}.on('init'),
actions: {
updateData: function() {
this.get('content').arrayContentWillChange(3, 0, 0);
this.set('content.3.foo', 'foo3-updated');
this.get('content').arrayContentDidChange(3, 0, 0);
}
}
});
相关文章:
- 正在将数据主题添加到所有项目
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 在单独的ul's
- 如何检查管道中未定义的项目
- Javascript排序的图像弹出窗口..可以't单独弹出
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 谷歌图表堆叠柱状图.如何设置每个单独堆叠项目(数据系列)的样式
- Codrops页面转换.如何创建单独的按钮,而不是列表项目的效果
- 有角度的拖放可在单独的容器中列出项目
- 如何制作一个项目列表,可以使用 Angular JS 单独切换
- 如何将一个VS2013项目中的通用打字稿代码共享到单独的VS2013项目中
- 在单独的UL中搜索匹配的LI项目
- 在单独的文件中使用Sequelize创建模型,并在项目中使用它们
- 如何使用iron:router为集合中的每个项目创建一个单独的链接
- 找出在Ember ArrayController中哪个单独的项目发生了变化
- 如何在单独的浏览器选项卡中从web应用程序打开第三方HTML项目
- 单独显示JS数组中的每个项目
- 使用HTML5/Javascript项目和单独的ASP部署解决方案.. NET Web API项目
- 如何通过url将数据从python文件发送到单独项目中的HTML文件(没有HTML作为模板)
- 如何在单独的项目中使用自动生成的typescript声明文件