2

我设置了一个对象列表,将它们添加到 content[] 数组列表中。到目前为止一切顺利。App.list 中的 Ember DOM 显示正确的数据。现在,当我开始更改内容属性而不删除/添加/replaceAt() App.list 中的任何对象时,Ember 似乎没有选择它。

查看:{{#App.list.content 中的每个项目}} {{item.title}} {{/each}}

代码:function myApp() { App = Ember.Application.create({});

  App.Item = Ember.Object.extend({
    title: null,
    parent: null
  });

  App.MyList = Ember.Object.extend({
    title: null,
    content: [],
    changed: function() {
      console.log('here');
    }.observes('content')
  });

  App.list = App.MyList.create({
    title: "foobar",
    content: [
      App.Item.create({
        title: "item1"
      }),
      App.Item.create({
        title: "item2"
      })
    ]
  });
  console.log(App.list.content);

  // Add 3rd object to list
  App.list.get('content').pushObject(
    App.Item.create({
      title: "item3"
    })
  );
}

..后来在一些随机的 Ember ArrayController 中我这样做: for (var i = 0; i < 2; i++) { App.list.content[i].title = "I CHANGED YOU"; }

查看我的 App.list 内容是正确的,但视图不正确。我错过了什么吗?如果我不得不猜测 ArrayHasChanged() 似乎被操纵以改变数组大小或改变我没有做的对象,我正在更改 content[] 数组的特定对象内的属性数据。有可能还是我必须删除At()/添加/删除对象?

4

1 回答 1

1

您需要使用 get 和 set 以便观察者/绑定触发您的更改。

// Bad
App.list.content[i].title = "blah";

// Good
App.get('list').objectAt(i).set('title', 'blah');

如果这仍然对您不起作用,则可能缺少其他内容。如果您可以发布一个 jsfiddle,那将有很大帮助!

于 2012-09-18T22:46:20.587 回答