3

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

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

1 回答 1

6

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

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

此外,您会在http://emberjs.com的第一个 Bindings 部分注意到一个非常相似的示例。注意说的评论// Later, after Ember has resolved bindings...

于 2012-04-13T03:13:32.827 回答