我在@each
视图中观察控制器属性(对象)。每次@each
更改,我想知道哪个项已更改。
有没有办法找到它?
Docket.OrganizationView = Ember.View.extend({
chartObserver: function() {
console.log(THE_ITEM_OF_CHARTDATA_THAT_HAS_CHANGED)
}.observes('controller.chartData.@each')
});
答案 0 :(得分:1)
您可以在控制器中定义ArrayComputed属性example。
ArrayComputed:创建一个运算的计算属性 依赖数组并用"一次一个更新"语义。
Ember.ArrayController.extend({
changedContent: Ember.arrayComputed("content.@each.name", {
addedItem: function(array, item, changeMeta, instanceMeta) {
array.clear();
array.pushObject(item);
return array;
},
removedItem: function(array, item, changeMeta, instanceMeta) {
array.clear();
array.pushObject(item);
return array;
}
}),
});
答案 1 :(得分:1)
使用observesBefore
调用在数组更改之前存储数组,以便您可以在更改后将其与数组进行比较:
Docket.OrganizationView = Ember.View.extend({
chartDataWillChange: function() {
this._oldChartData = this.get('controller.chartData').slice(0);
}.observesBefore('controller.chartData.@each')
chartDataDidChange: function() {
var oldChartData = this._oldChartData;
var newChartData = this.get('controller.chartData');
// Compare the contents of the two arrays
// to find out what has changed
var addedItems = newChartData.filter(function(item) {
return !oldChartData.contains(item);
});
var removedItems = oldChartData.filter(function(item) {
return !newChartData.contains(item);
});
}.observes('controller.chartData.@each')
});