私は 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」でオブザーバーが呼び出されるように内部フラグが設定されます。