0

EmberJS では、他のモデルのコレクションであるフィールドを持つモデルを作成したいと考えています。これは簡単なことだと思いましたが、うまくいきません。

以下の JSFiddle に示されているように、私の現在のアプローチは、2 つのモデル (この場合はFooBar) と s のコレクション モデルBar( BarCollection) を作成することです。次に、属性としてFooaを指定し、コレクションに s をBarCollection追加しようとします。Barうまくいきません。エラーはスローされず、コレクションは存在しますが、要素は追加されません。

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

4

1 に答える 1

2

これは、具体的なApp.BarCollectionインスタンスをcontentプロパティで初期化していないためです。これは、配列Ember.ArrayProxyへのプロキシとして必要contentです。指定しない場合、プロキシは使用する配列を決定しません...

もう 1 つの問題は、インスタンスlowerCaseとクラスに名前を付ける規則であることUpperCaseです。ですApp.foogetまた、常におよびを介してプロパティにアクセスする必要があります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'
}));​

注:あなたの場合、プロパティに を使用する必要はありませArrayProxybars。単純な 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 に答える