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

これはEmberJS0.9.8.1のバグです:https ://github.com/emberjs/ember.js/issues/541

于 2012-06-05T17:31:55.057 に答える
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 に答える
0

このコードを実行すると、コンソールに「IT WORKED!collabelが変更されたときに通知が届きました」というメッセージが表示されます。(Chrome 19を使用します。)

http://jsfiddle.net/4H2ya/

したがって、複数の@eachが実際にサポートされており、何も悪いことはしていません。どのバージョンのEmberを使用していますか?

于 2012-05-31T15:59:47.727 に答える