EmberJS绑定不起作用

时间:2012-04-13 01:30:30

标签: ember.js

我刚开始学习Ember.js,并在http://emberjs.com/阅读doucmentation。 在Binding部分,我只是复制并粘贴了以下代码,并在Chrome浏览器上执行。绑定数据(App.husband.get('householdIncome'))始终返回'undefined'。你知道为什么吗?我想知道为什么我的代码不起作用。

----- HTML code ------

<html>
<body>
    <script src="js/libs/jquery-1.7.2.js"></script>
    <script src="js/libs/ember-0.9.6.js"></script>
    <script src="js/app.js"></script>
</body>
</html>

----- app.js ------

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

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

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

------结果输出-----------

80000
undefined

1 个答案:

答案 0 :(得分:6)

您需要将Em.run.sync();放在.get()之前。原因是连接绑定属性的Ember的RunLoop尚未完成运行。通过使用Em.run.sync();,您可以强制RunLoop在任何后续代码之前运行完成。这可能看起来很不方便,但通常情况下,在声明具有绑定属性的对象后,您不需要这么快就调用.get(),因为RunLoop最终会将这些属性最终连接到Handlebars模板,这些模板正确地显示了这些值。但在某些情况下,您需要立即绑定这些属性,在这种情况下,您使用Em.run.sync()

请参阅此jsfiddle:http://jsfiddle.net/edwG6/

另外,您会在第一个Bindings部分的http://emberjs.com上看到一个非常相似的例子。请注意// Later, after Ember has resolved bindings...

的评论