在 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
更新(到“Bar”)。
这是预期的行为,并且创建绑定是可接受的解决方法吗?