1

我正在尝试构建一个观察者来检测何时发生表模型深处的变化。我可以在“rows.@each.label”上收到通知,但不能在“rows.@each.cols.@each.label”上收到通知。

App.Row = Ember.Object.extend({
    init: function () {
        this.set('cols', []);
    }
});

App.Col = Ember.Object.extend({
    label: null
});
    var doneWithSetup = false;
var table = Ember.Object.create({
    rows: [],
    colLabelChanged: function () {
        if (doneWithSetup) console.log("IT WORKED! I got notified when a col label changed");
    }.observes("rows.@each.cols.@each.label")
});

var row = App.Row.create({});
var col1 = App.Col.create({ label: "Label 1" });
var col2 = App.Col.create({ label: "Label 2" });
row.get('cols').pushObject(col1);
row.get('cols').pushObject(col2);
table.get('rows').pushObject(row);

// OK, lets try this observer out...
doneWithSetup = true;
col1.set('label', 'some new label');

// FIXME: how do I get colLabelChanged to fire???

你可以在这里试试:

http://jsfiddle.net/4H2ya/3/

我做错了什么还是不支持多级@each 观察者?

4

3 回答 3

1

根据文档,不支持嵌套 @each。

Note that @each only works one level deep. You cannot use nested forms like todos.@each.owner.name or todos.@each.owner.@each.name.

http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/

于 2013-10-17T17:43:20.200 回答
1

这是 EmberJS 0.9.8.1 中的一个错误:https ://github.com/emberjs/ember.js/issues/541

于 2012-06-05T17:31:55.057 回答
0

运行此代码并在控制台中得到“它工作!当 col 标签更改时我收到通知”。(使用 Chrome 19。)

http://jsfiddle.net/4H2ya/

所以实际上支持多个@each,你没有做错任何事。您使用的是哪个版本的 Ember?

于 2012-05-31T15:59:47.727 回答