6

私は Ember.js を学んでいて、いくつかのガイドを読んでいます。私はここでオブザーバーについて読んでいました: http://emberjs.com/guides/object-model/observers/

サンプルをいじってみたかったので、それをコピーして js ファイルに貼り付けました。オブザーバー コールバックにアラート ステートメントを追加した後、それが呼び出されていないことに驚きました。

http://jsbin.com/UWEseSo/2/edit?js,output

あなたが追加した場合、私はそれを見つけることができました:

person.get('fullName');

firstName を設定する呼び出しの前に、オブザーバー コールバックが呼び出されます。コールバックの直後に名を再度設定すると、再び呼び出されなくなります。

ここで何が起こっているのか誰でも説明できますか?

ありがとうございました。

編集 - - - -

コードをもう少し調べてみたところ、なぜこのような動作になるのかがわかりました。この例にはバグがあるように見えますが、それは単なる最適化である可能性があります。「get」を呼び出すと、オブザーバーが機能することを以前に観察しました。「get」を呼び出さないと、オブザーバーは機能しません。私は、Ember.js がこれについて賢明であり、「get」が呼び出されなかった場合、意図的にオブザーバーを呼び出さないようにしていると考えています。アプリケーションが古い情報を表示する可能性がないため、「get」がなければオブザーバーを呼び出す理由がないため、彼らはこれを行っている可能性があります。

「get」が呼び出されると、次の「set」でオブザーバーが呼び出されるように内部フラグが設定されます。

4

1 に答える 1

15

この動作の説明を自分で正しく理解しているようです。また、主にパフォーマンス上の理由で rc8 に導入された変更があることを確認するために、実際に想定を確認してください。

あなたはそれに関する完全な記事をここで読むことができます.UNCONSUMED COMPUTED PROPERTIES DO NOT TRIGGER OBSERVERSの下で

これは基本的に、計算されたプロパティを監視する必要があるが、現在それを取得していない場合は、メソッドでそれを取得するだけgetであることを意味しますinit

それが役に立てば幸い。

于 2013-10-13T17:24:52.790 に答える