0

根据 Ember指南,这个片段应该设置实例的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'));
});

这将输出更新的收入。

4

1 回答 1

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/

于 2013-10-22T13:17:40.787 回答