我刚开始学习Ember.js,并在http://emberjs.com/上阅读了doucmentation .在Binding部分,我只是复制并粘贴了以下代码,并在Chrome浏览器上执行.绑定数据(App.husband.get('householdIncome'))始终返回'undefined'.你知道为什么吗?我想知道为什么我的代码不起作用.
----- HTML代码------
<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>
Run Code Online (Sandbox Code Playgroud)
----- 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
Run Code Online (Sandbox Code Playgroud)
------结果输出-----------
80000
undefined
Run Code Online (Sandbox Code Playgroud)
你需要放在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...