2012-04-13 154 views
3

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

----- 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> 

----- ------ 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 

回答

6

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

看到这个的jsfiddle:http://jsfiddle.net/edwG6/

而且,你会在第一绑定部分http://emberjs.com发现一个非常类似的例子。注意// Later, after Ember has resolved bindings...

+0

也请看看http://stackoverflow.com/q/9978354/65542 – pangratz 2012-04-13 09:34:37

+0

+1为上述链接 – 2012-04-13 13:48:37

+0

嗨亚历山大,非常感谢。 Em.run.sync()解决了这个问题。 – hideki 2012-04-13 18:12:08