这里可能发生了一些愚蠢的事情,但我不能做一些非常基本的事情。我有一个ArrayController
,content
属性中有四个数组项。以下是Ember Inspector的截图:
如果我键入$E.get('content')
,其中$ E指向ArrayController对象,我希望得到对该数组的引用。相反,我得到“未定义”。如果我改为点击Inspector的UI来将$ E分配给ArrayController的内容属性,这可以正常工作。
非常奇怪,它在检查员以外造成我的问题,所以任何人们可以提供的帮助都将非常感激。
更新:
一些额外的背景......
我所指的ArrayController是以与普通方式稍微不同的方式实例化的。这种变化可能是问题的一部分,所以这里有详细信息:
我的模型定义如下:
App.Enum = DS.Model.extend(App.CouchDocPropsMixin,{
data: DS.attr("EnumData"
defaultValue: function() {
var object = App.EnumData.create();
var initialProp = Ember.Object.create({id:"value",name:"name"});
object.pushObject(initialProp);
return object;
}
}),
desc: DS.attr("prose"),
type: DS.attr("string")
});
对于prose
和EnumData
,都需要构建一个序列化器/反序列化器。散文可以被忽略,因为它只不过是一个长字符串,我希望类型系统看起来略有不同。可能的冲突是EnumData及其使用方式。解串器正在做的是采用字典数据结构(ala,PHP关联数组串行化)并将其转换为更像Ember的扁平对象:
{foo: {bar:baz}}
变为{id:foo, bar:baz})
App.EnumDataTransform = DS.Transform.extend({
deserialize: function(serialized) {
var enumData = App.EnumData.create();
for (var property in serialized) {
serialized[property].id = property;
enumData.pushObject(serialized[property]);
}
return enumData;
},
serialize: function(deserialized) {
var response = {};
if(deserialized.length) {
deserialized.forEach(function(item) {
var id = item.id;
delete item.id;
response[id] = item;
});
}
return response;
}
});
此上下文的最后一部分是EnumData对象定义,它现在是一个通用的ArrayController。我打算在某些时候为它添加一些计算属性,但是一旦我得到了基础工作:
App.EnumData = Ember.ArrayController.extend({
// generic for now
});
无论如何,这是一个相当冗长的故事,讲述了示例中的ArrayController是如何产生的。