在 EmberJS 中,我想创建一个模型,它的字段是其他模型的集合。我认为这将是一件容易的事情,但我无法让它发挥作用。
正如下面的 JSFiddle 所示,我当前的方法是创建两个模型(在本例中为Foo
and )和一个用于s ( )Bar
的集合模型。然后我将a作为属性,然后尝试将s 添加到集合中。它不起作用。不会抛出任何错误,并且集合存在,但从未向其中添加任何元素。Bar
BarCollection
Foo
BarCollection
Bar
在 EmberJS 中,我想创建一个模型,它的字段是其他模型的集合。我认为这将是一件容易的事情,但我无法让它发挥作用。
正如下面的 JSFiddle 所示,我当前的方法是创建两个模型(在本例中为Foo
and )和一个用于s ( )Bar
的集合模型。然后我将a作为属性,然后尝试将s 添加到集合中。它不起作用。不会抛出任何错误,并且集合存在,但从未向其中添加任何元素。Bar
BarCollection
Foo
BarCollection
Bar
那是因为您还没有App.BarCollection
使用属性初始化您的具体实例content
。这是需要的,因为它是阵列Ember.ArrayProxy
的代理content
。如果您不指定一个,则代理不会使用哪个数组...
另一个问题是命名实例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
财产使用 an 。一个简单的 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');