我有一个类别列表。每个类别都可以有子类别。 这是我创建的模型:
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);
}
};
}
});
答案 0 :(得分:2)
这是因为传递给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: []
}));
}
});