0

在 EmberJS 中,我想创建一个模型,它的字段是其他模型的集合。我认为这将是一件容易的事情,但我无法让它发挥作用。

正如下面的 JSFiddle 所示,我当前的方法是创建两个模型(在本例中为Fooand )和一个用于s ( )Bar的集合模型。然后我将a作为属性,然后尝试将s 添加到集合中。它不起作用。不会抛出任何错误,并且集合存在,但从未向其中添加任何元素。BarBarCollectionFooBarCollectionBar

http://jsfiddle.net/tbxhQ/1/

4

1 回答 1

2

那是因为您还没有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');​
于 2012-07-21T17:34:32.967 回答