根据Ember guide,此代码段应设置houseHoldIncome
实例的App.wife
属性。
App.wife = Ember.Object.create({
householdIncome: 80000
});
App.husband = Ember.Object.create({
householdIncomeBinding: 'App.wife.householdIncome'
});
App.husband.get('householdIncome'); // 80000
// Someone gets raise.
App.husband.set('householdIncome', 90000);
console.log(App.wife.get('householdIncome')); // 90000
console.log(App.wife.get('householdIncome'))
仍然输出80000.这个到期绑定是不是立即更新还是我做错了什么?
修改
似乎绑定不会立即更新。
App.wife.addObserver('householdIncome', function() {
console.log('Wife income changed: '+App.wife.get('householdIncome'));
});
这将输出更新的收入。
答案 0 :(得分:1)
这是预期的行为,因为使用名为backburner的lib对ember队列进行了一些更改。这样做的好处是,模型属性中的一些更改(例如在foreach中)只会渲染一次。所以你不需要关心性能,观察者和dom更新。
如果使用Ember.run.sync()
,您可以强制绑定进行刷新,这样您就会看到正在传播的更改:
App.wife = Ember.Object.create({
householdIncome: 80000
});
App.husband = Ember.Object.create({
householdIncomeBinding: 'App.wife.householdIncome'
});
App.husband.get('householdIncome'); // 80000
// Someone gets raise.
App.husband.set('householdIncome', 90000);
Ember.run.sync();
console.log(App.wife.get('householdIncome')); // 90000
在那个小提琴中,你会看到妻子householdIncome
属性被更新http://jsfiddle.net/marciojunior/uCr3C/