2

私は実際に ember js をいじっていますが、オブザーバーの動作について混乱しています。

App.ProjectView = Ember.View.extend({
    modelChanged: function() {
        console.log('modelChanged to: ');
        this.get('controller.model.images').forEach(function(item) {
            console.log(item.get('src'));
        });
    }.observes('controller.model.images')
});

ルートにアクセスすると、このオブザーバーが 2 回または 3 回呼び出されます。しかし、私はその理由を理解できず、それ以上の情報を見つけることができません.

助けてくれてありがとう。

4

1 に答える 1

3

オブジェクトが作成されて入力されると、オブザーバーが複数回起動する可能性があります。上記の例では、model.images が作成され、未定義に設定されている可能性があります... bam! オブザーバー発動。次に、model.images の内容が実際の空の配列に設定されます... bam! オブザーバー発動。次に、コンテンツが配列を埋め始めます...バム!バム!バム!複数のオブザーバーが発砲する可能性があります。

長さ > 0 または定義されている場合にのみ model.images で何かを行うなど、これに対抗する方法があります。ロードされるデータの長さがわかっている場合は、長さが一致する場合にのみオブザーバーを処理できます。これらのアプローチは、アプリケーションの構造によって異なります。

于 2013-03-27T20:25:33.223 に答える