使用@each观察数组的元素时,如何知道要添加或删除哪些元素?

时间:2012-10-31 23:45:37

标签: ember.js

主题说明了一切。我正在观察数组元素属性的变化:

onChange: function() {
  //
}.observes(content.@each.selected)

我想确切地知道要添加和删除哪些元素。经过几次实验,我发现我可以在观察函数中添加三个参数,但没有一个是添加/删除的元素。

是否有比保留数组副本然后与新数据进行手动比较更简单的解决方案?

1 个答案:

答案 0 :(得分:0)

您可以在更改内容之前存储内容,并将其与更改后的内容进行比较:

willChange: function() {
  this.contentBeforeSelectedChange = this.get('content').slice(0);
}.observesBefore('content.@each.selected')

onChange: function() {
  var content = this.get('content');
  var oldContent = this.contentBeforeSelectedChange.toArray();

  var whichChanged = content.find(function(item, index){
     var oldItem = oldContent[index].get('selected');
     return item.get('selected') !== oldItem.get('selected');
  });
}.observes(content.@each.selected)