Ember.js Bindings教程

时间:2013-10-22 12:35:41

标签: javascript jquery ember.js

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

这将输出更新的收入。

1 个答案:

答案 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/