2

オブジェクトのリストをセットアップし、それらを content[] 配列リストに追加します。ここまでは順調。App.list の Ember DOM は正しいデータを表示します。ここで、App.list 内のオブジェクトを remove/add/replaceAt() せずにコンテンツ プロパティの変更を開始すると、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[] 配列の特定のオブジェクト内のプロパティ データを変更しています。removeAt()/Add/Delete オブジェクトは可能ですか?

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 に答える