これは、具体的なApp.BarCollection
インスタンスをcontent
プロパティで初期化していないためです。これは、配列Ember.ArrayProxy
へのプロキシとして必要content
です。指定しない場合、プロキシは使用する配列を決定しません...
もう 1 つの問題は、インスタンスlowerCase
とクラスに名前を付ける規則であることUpperCase
です。ですApp.foo
。get
また、常におよびを介してプロパティにアクセスする必要がありますset
。これにより、バインディングが正しく解決されることが保証されます。
結果は次のようになります。 http://jsfiddle.net/pangratz666/fpqTv/を参照してください。
ハンドルバー:
<script type="text/x-handlebars">
All the bars from {{App.foo.name}}:
<ul>
{{#each App.foo.bars }}
<li>{{this.name}}</li>
{{/each}}
</ul>
</script>
JavaScript
:
App = Ember.Application.create();
App.Bar = Ember.Object.extend();
App.BarCollection = Ember.ArrayProxy.extend();
App.foo = Ember.Object.create({
name: 'Fred',
bars: App.BarCollection.create({
content: []
})
});
App.getPath('foo.bars').pushObject(App.Bar.create({
name: 'bob'
}));
注:あなたの場合、プロパティに を使用する必要はありませArrayProxy
んbars
。単純な JavaScript 配列も同様に機能します。したがって、これは投稿された例に対する私の最後の提案です。http://jsfiddle.net/pangratz666/CHHXb/を参照してください。
JavaScript :
App = Ember.Application.create();
App.Bar = Ember.Object.extend();
App.foo = Ember.Object.create({
name: 'Fred',
bars: [],
addToBars: function(name) {
this.get('bars').pushObject(App.Bar.create({
name: name
}));
}
});
App.get('foo').addToBars('bob');