【问题标题】:Ember.js - Define ArrayProxy inside an ObjectEmber.js - 在对象内定义 ArrayProxy
【发布时间】:2012-06-01 11:30:04
【问题描述】:

我有一个类别列表。每个类别都可以有子类别。 这是我创建的模型:

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);
            }
        };
    }
});

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    这是因为传递给extend 的哈希定义了类实例化的对象原型上的属性。而create 定义实例化对象的属性。 Dan Gebhardt 有一篇关于Understanding Ember.js Object 的非常好的博客文章。你应该检查一下。

    您的问题可以如下解决,见http://jsfiddle.net/pangratz666/hXHqs/:

    App.Category = Em.Object.extend({
        init: function() {
            this._super();
            this.set('subCategories', Em.ArrayProxy.create({
                content: []
            }));
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多