Ember.js 在自定义DS.Attr类型上设置余烬数据属性-或刷新模板视图

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'),因此我通过以下方式对其进行了

这是我无尽痛苦的原因,希望有人能给我指出正确的方向。我参与的第一个Ember.JS项目

基本上,我有一堆“问题”模型。基本上,简化的版本是:

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

正在擦掉幸福的眼泪。非常感谢。