2013-10-22 32 views
0

根据Ember guide,此代码段应设置App.wife实例的houseHoldIncome属性。Ember.js绑定教程

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')); 
}); 

这将输出更新的收入。

回答

1

这是预期的行为,因为ember使用名为backburner的库排队一些更改。这样做的好处是模型属性的一些变化,例如在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/