gpt4 book ai didi

javascript - 找出在 Ember ArrayController 中更改的单个项目

转载 作者:行者123 更新时间:2023-11-30 17:22:13 26 4
gpt4 key购买 nike

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);
}
},

关于javascript - 找出在 Ember ArrayController 中更改的单个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24947807/

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