不能让ember绑定按照记录的方式工作

Sho*_*oan 7 ember.js

我正在关注emberjs.com上的文档,但无法获得第一个绑定示例.

我创建了一个jsfiddle来演示.我错过了什么?

pan*_*atz 11

Ember.js使用RunLoop的概念来允许绑定,观察者等.

该示例的问题在于,通过设置(绑定)属性并立即通过console.log无事件获取值,将触发RunLoop并因此同步更改.有两篇关于RunLoop的优秀博客文章:第1 部分第2部分.虽然他们以Sproutcore为目标,但Ember.js的概念大致相同.

有两种方法可以使您的示例正常工作.

通过强制同步 Ember.run.sync()

正如文档所述,调用Ember.run.sync() ...是一种立即强制应用程序中的所有绑定同步的有用方法.这留下了这样的代码,请参阅http://jsfiddle.net/pangratz666/cwR3P/

App = Ember.Application.create({});
App.wife = Ember.Object.create({
  householdIncome: 80000
});

App.husband = Ember.Object.create({
  householdIncomeBinding: 'App.wife.householdIncome'
});

// force bindings to sync
Ember.run.sync();

console.log(App.husband.get('householdIncome')); // 80000

// Someone gets raise.
App.husband.set('householdIncome', 90000);

// force bindings to sync
Ember.run.sync();

console.log(App.wife.get('householdIncome')); // 90000?
Run Code Online (Sandbox Code Playgroud)

或者第二个选择是......

在视图中显示值

在视图中显示属性会为您处理所有RunLoop的内容,请参阅http://jsfiddle.net/pangratz666/Ub97S/

JavaScript:

App = Ember.Application.create({});
App.wife = Ember.Object.create({
    householdIncome: 80000
});

App.husband = Ember.Object.create({
    householdIncomeBinding: 'App.wife.householdIncome'
});

// invoke function in 3000ms
Ember.run.later(function() {
    // someone gets a raise
    App.husband.set('householdIncome', 90000);
}, 3000);?
Run Code Online (Sandbox Code Playgroud)

把手(视图):

<script type="text/x-handlebars" >
    Wifes income: {{App.wife.householdIncome}}<br/>
    Husbands income: {{App.husband.householdIncome}}
</script>?
Run Code Online (Sandbox Code Playgroud)