0

関連するビューが更新されるように、ArrayController のコンテンツ プロパティの要素を更新するための最良の方法は何ですか。

現在、私は次のコードを使用しています。これはコンテンツを更新しますが、ビューは更新しません

    updateContent: function(device) {
        for (var index = 0; index < this.content.length; index++) {
            if (this.content[index]._id === device._id) {
                this.content.splice(index, 1, device);
                break;
            }
        }
    }

これを行うための最良のアプローチは何ですか?

この特定のケースでは、ビューの更新に応じてデバイスの状態が変化するため、soket.io を使用してサーバーから呼び出しを受けています。

4

2 に答える 2

3

検索するメソッド名はreplaceです(ArrayProxy が継承する MutableArray にあります)。
挿入する要素の配列を渡すという点で API が異なることに注意してください。

this.content.splice(index, 1, [デバイス] );

@ebryn が述べたように、配列のスプライスはオーバーライドされず、元のメソッドは配列のコンテンツを変更しますが、ビュー (ハンドルバーによって処理される DOM の変更) がおそらくその 1 つであるオブザーバーには通知しません。

これはバージョン 0.96 で確認済みです。

于 2012-12-11T13:26:45.840 に答える
1

コンテンツ配列で監視可能な配列メソッドを使用していないため、ビューが更新されていません。

監視可能な配列メソッドのリストについては、Ember.Array/Ember.Enumerable ドキュメントを参照してください。

http://docs.emberjs.com/#doc=Ember.Array&src=false

http://docs.emberjs.com/#doc=Ember.Enumerable&src=false

于 2012-06-12T02:28:46.743 に答える