我刚开始学习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
答案 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...