Ember.jsでは、配列であるサブプロパティの変更に反応するオブザーバーを作成すると、直感的でない動作が発生します。オブザーバーが配列プロパティを直接監視する場合は起動に失敗しますが、同じプロパティへのバインドを監視する場合は期待どおりに機能します。
簡単な例:
ハンドルバー:
<script type="text/x-handlebars">
<b>App.View1.name:</b> {{App.View1.name}} <br />
<b>App.View2.name:</b> {{App.View2.name}}
</script>
Javascript:
App = Em.Application.create();
// A common dependency for two views
var dependency = Em.Object.create({
prop: []
});
// Directly observes dependency.prop
App.View1 = Em.View.create({
dependency: dependency,
name: "Foo",
changeName: function () {
this.set("name", "Bar");
}.observes("dependency.prop")
});
// Indirectly observes dependency.prop via a binding
App.View2 = Em.View.create({
dependency: dependency,
name: "Foo",
changeName: function () {
this.set("name", "Bar");
}.observes("prop"),
propBinding: "dependency.prop"
});
// Updating the 'prop' property of dependency with an element.
dependency.get("prop").pushObject("An object.");
私はここでJSFiddleにそれを載せました:http://jsfiddle.net/kbaXG/50/
ここでは、更新中(「バー」に)は更新さApp.View1.name
れません(「Foo」のまま)。App.View2.name
これは予想される動作であり、バインディングを作成することは許容できる回避策ですか?