(ember.js)Get Binding属性返回undefined

时间:2012-01-13 03:48:22

标签: javascript ember.js

该守则来自ember.js官方介绍:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
</head>
<body>
<script type="text/javascript" src="jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="ember-0.9.3.js"></script>
<script type="text/javascript">
    var App = Ember.Application.create();

    App.president = Ember.Object.create({
        name: "Barack Obama"
    });

    App.country = Ember.Object.create({
        presidentNameBinding: "App.president.name"
    });

    App.country.get("presidentName");
</script>
</body>
</html>

我试图显示App.country.get("presidentName");的返回值,所以我用警报包裹它,但警报始终显示undefined。有线部分是如果我在firebug控制台中执行此语句,它会正确显示"Barack Obama"

官方介绍提到:

  

请注意,绑定不会立即更新。恩伯等到全部   您的应用程序代码在同步之前已经完成运行   变化

这是我无法获取代码中绑定属性值的原因吗? “应用程序代码已经完成运行”实际意味着什么?

2 个答案:

答案 0 :(得分:1)

当您使用具有此类绑定的对象时,您必须手动触发绑定以与Ember.run.sync()同步:

var App = Ember.Application.create();

App.president = Ember.Object.create({
    name: "Barack Obama"
});

App.country = Ember.Object.create({
    presidentNameBinding: "App.president.name"
});

Ember.run.sync(); // Manually sync bindings

alert( App.country.get("presidentName") );

这是一个带有示例的jsFiddle:http://jsfiddle.net/ebryn/3Ctns/

答案 1 :(得分:0)

您需要添加一个Observer,它基本上在初始应用程序代码运行后触发。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
</head>
<body>
<script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="js/ember-0.9.3.js"></script>
<script type="text/javascript">
    var App = Ember.Application.create();

    App.president = Ember.Object.create({
        name: "Barack Obama"
    });

    App.country = Ember.Object.create({
        presidentNameBinding: "App.president.name"
    });

    App.country.addObserver('presidentName', function() {
        alert(App.country.get("presidentName"));
    });
</script>
</body>
</html>

ember.js introduction中查找“addObserver”。