[英]Collection as an attribute in EmberJS? (One-to-many relation)
在EmberJS中,我想創建一個具有其他模型集合的字段的模型。 我認為這將是一件容易的事情,但我無法讓它發揮作用。
我現在的方法,如下面的JSFiddle所示,是創建兩個模型(在本例中為Foo
和Bar
)和Bar
s( BarCollection
)的集合模型。 然后我給Foo
一個BarCollection
作為屬性,然后嘗試將Bar
添加到集合中。 它不起作用。 不會拋出任何錯誤,並且集合存在,但是沒有添加任何元素。
那是因為您沒有使用content
屬性初始化具體的App.BarCollection
實例。 這是必需的,因為Ember.ArrayProxy
代理content
arrray。 如果你沒有指定一個,代理不會使用哪個數組......
另一個問題是命名實例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'
}));
注意:在您的情況下,不需要為您的bars
屬性使用ArrayProxy
。 一個簡單的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');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.