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在实例化对象上定义属性。Dan Gebhardt 有一篇关于理解 Ember.js 对象的非常好的博文。你应该检查一下。

您的问题可以按如下方式解决,请参见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 回答