我很困惑。我有下面的模型,对attr标签和固定装置的转换:
Tracker.Story = DS.Model.extend({
title: DS.attr('string'),
tags: DS.attr('array', []),
});
DS.ArrayTransform = DS.Transform.extend({
deserialize: function(serialized) {
return serialized;
},
serialize: function(deserialized) {
return deserialized.split(',');
}
});
Tracker.register("transform:array", DS.ArrayTransform);
Tracker.Story.FIXTURES = [
{
id: 1,
title: "Some story",
tags: ["tag1", "tag2", "tag3"],
}和模板
{{#each itemController="story"}}
{{title}}
{{#each tag in tags}}
{{tag}}
{{/each}}
{{/each}}它对固定装置的故事很有用。我通过接口添加了新的故事,其中输入字段定义为:
{{input type="text" value=tags}}正确转换并从字符串返回数组(例如,从"1,2,3“返回数组)。
但是,添加了带有下一条消息的故事的渲染标记失败了:
断言失败:#每个循环都必须是一个数组的值。你通过了1 ember.js:417
不明TypeError:对象1没有方法'addArrayObserver‘ember.js:22976
隐藏错误:您所做的事情导致视图在呈现后但在插入到DOM之前重新呈现。
发布于 2013-10-31 16:27:46
输入助手不支持将项保存为数组。它在输入字段中正确显示的原因是因为在对象上调用了toString,数组的toString是1、2、3等等.当您更改输入字段时,它正在释放底层数组,并将其保存为字符串1、2、3。
转换只在加载/保存模型时执行,而不是在底层模型的每个get/set上执行。
最好的选择是将输入字段与另一个属性关联起来,并且随着该字段的更改,您将使用数组更新基础字段。
像这样的东西会有用的:
http://emberjs.jsbin.com/EMapanu/3/edit
App.IndexRoute = Ember.Route.extend({
model: function() {
return ['red', 'yellow', 'blue'];
},
setupController: function(controller, model){
this._super(controller, model);
controller.set('fakeModel', model);
}
});
App.IndexController = Em.ArrayController.extend({
modelUpdater: function(){
var fm = this.get('fakeModel');
if(!(fm instanceof Array)){
fm = (this.get('fakeModel') || "").split(',');
}
this.set('model', fm);
}.observes('fakeModel')
});https://stackoverflow.com/questions/19711423
复制相似问题