5

各モデルの特定のプロパティの変化を観察ArrayControllerする があります。私はその目的のために使用します:.observes('content.@each.someprop')

App.ListController = Em.ArrayController.extend({
    content: [],

    myObserver: function () {
        //check changed property
        //do stuff if changed to some specific value
    }.observes('content.@each.someprop')
});

これまでのところ、モデルのプロパティが変更されると、オブザーバーが起動します。ただし、起動すると、どのモデルが変更されたのかわかりません。モデルを反復処理し、そのプロパティを別の場所に保存されている古い値と比較して把握する必要がありますが、これは非常に不器用で非効率的です。オブザーバーが受け取るをチェックしようとしましたが、argumentsそれらも役に立ちませconsole.log(arguments)ん。[Class, "content.@each.someprop"]console.log(arguments[0].toString())<App.ListController:ember366>

私の質問は、配列の@eachプロパティを観察するときにどのモデルが変更されたかを知る方法はありますか?

アップデート

オブザーバーが起動したら、監視対象のプロパティが特定の値に変更されたかどうかを確認し、変更された場合は何らかの処理を行います。

提案されたように、私は今チェックしitemControllerます。

4

2 に答える 2

1

reduceComputedまたはarrayComputedを使用して、現在の ember でこれを実現できます。

ただし、ユースケースを知っておくとよいでしょう。オブザーバーを手動で作成するよりも優れたアプローチがある可能性が非常に高いです。

于 2013-10-23T18:42:26.523 に答える
0

アクセスできるモデルでプロパティを直接観察できますthis。オブザーバーを使用する@each場合、特定のレコードが変更されたことを気にする必要はありません。何かが変更されただけです。

を使用するitemControllerこともオプションですが、やり過ぎかもしれません。

于 2013-03-16T09:39:33.623 に答える