Ember.js 在自定义DS.Attr类型上设置余烬数据属性-或刷新模板视图
这是我无尽痛苦的原因,希望有人能给我指出正确的方向。我参与的第一个Ember.JS项目 基本上,我有一堆“问题”模型。基本上,简化的版本是:Ember.js 在自定义DS.Attr类型上设置余烬数据属性-或刷新模板视图,ember.js,ember-data,handlebars.js,Ember.js,Ember Data,Handlebars.js,这是我无尽痛苦的原因,希望有人能给我指出正确的方向。我参与的第一个Ember.JS项目 基本上,我有一堆“问题”模型。基本上,简化的版本是: App.Question = DS.Model.extend({ title: DS.attr('string'), answers: DS.attr('array'), chosen_answers: DS.attr('array'), }); 答案是一个数组。由于默认情况下没有DS.attr('array'),因此我通过以下方式对其进行了
App.Question = DS.Model.extend({
title: DS.attr('string'),
answers: DS.attr('array'),
chosen_answers: DS.attr('array'),
});
答案是一个数组。由于默认情况下没有DS.attr('array'),因此我通过以下方式对其进行了定义:
/* Register 'array' data type */
DS.ArrayTransform = DS.Transform.extend({
deserialize: function(serialized) {
return (Ember.typeOf(serialized) == "array")
? serialized
: [];
},
serialize: function(deserialized) {
var type = Ember.typeOf(deserialized);
if (type == 'array') {
return deserialized
} else if (type == 'string') {
return deserialized.split(',').map(function(item) {
return jQuery.trim(item);
});
} else {
return [];
}
}
});
App.register("transform:array", DS.ArrayTransform);
无论如何,答案数组被填充为(重要位…)的关联数组(标题处于活动状态)。当选择该答案时,is_active设置为true
因此,问题模型包含一系列答案。在我的模板中,当我点击其中一个答案时,我向QuestionController发出一个动作。在这一行动中,我希望能够做到:
this.set('answers[0].is_active', true);
(显然,用正确的索引替换“0”,但这对于这个问题并不重要)
我认为我最接近的是:
var answers = this.get('answers');
answers[0].is_active = true;
this.set('answers', answers);
但是,这不会更新我在模板中拥有的{{if this.is_active}}}句柄帮助器。
奇怪的是,如果我触发动作,导航“back”,然后导航“forward”,那么{{{#if this.is_active}}辅助程序将正确呈现
这几天来我完全被难住了。如果您只是使用foo进行设置,那么任何指针都将受到极大的欢迎。您可能会被绊倒,因为您设置的属性没有使用Ember的
get
/set
,如果您只是使用foo进行设置。property Ember无法捕获属性已更改的事实。因为我猜答案本身不是一个余烬对象,所以您仍然可以使用Ember.set(obj,'property',value)
,任何观察者都会收到属性已更改的通知
var answers = this.get('answers'),
answer = answers.objectAt(0);
Ember.set(answer, 'is_active', true);
正在擦掉幸福的眼泪。非常感谢。