1

カテゴリのリストがあります。各カテゴリにはサブカテゴリを含めることができます。これは私が作成したモデルです:

App.Category = Em.Object.extend({
    id: null,
    name: null,
    subCategories: Em.ArrayProxy.create({content: []})
});

問題は、サブカテゴリをsubCategories配列にプッシュすると、すべてのインスタンスにプッシュされることですApp.Category

このjsFiddleを見てください。

なぜこれが起こっているのか、これを正しく動作させるにはどのように書き直す必要があるのか​​ わかりません。


コード:

App.Category = Em.Object.extend({
    id: null,
    name: null,
    subCategories: Em.ArrayProxy.create({content: []})
});

App.categories = Em.ArrayController.create({
    content: [],

    // assumes list of categories is ordered by parent id
    loadCategories: function(cats) {
        for (var i=0, cat; i < cats.length; i++) {
            var parentID = cats[i].parentID;
            delete cats[i].parentID;
            cat = App.Category.create(cats[i]);

            if (parentID !== null) {
                var parent = this.findProperty('id', parentID);
                parent.get('subCategories').pushObject(cat);
            } else {
                this.pushObject(cat);
            }
        };
    }
});
4

1 に答える 1

2

これは、渡されたハッシュがextend、クラスによってインスタンス化されるオブジェクトのプロトタイプのプロパティを定義するためです。一方create、インスタンス化されたオブジェクトのプロパティを定義します。Understanding Ember.js Objectについて、Dan Gebhardt による非常に優れたブログ投稿があります。あなたはそれをチェックアウトする必要があります。

問題は次のように解決できます。 http://jsfiddle.net/pangratz666/hXHqs/を参照してください。

App.Category = Em.Object.extend({
    init: function() {
        this._super();
        this.set('subCategories', Em.ArrayProxy.create({
            content: []
        }));
    }
});
于 2012-06-01T14:07:24.180 に答える