2013-10-22 48 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/