Ember.js绑定教程

Ember.js Bindings Tutorial

本文关键字:教程 绑定 js Ember      更新时间:2023-09-26

根据 Ember 指南,此代码段应设置 App.wife 实例的 houseHoldIncome 属性。

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

这将输出更新的收入。

这是预期的行为,因为 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/