该守则来自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"
。
官方介绍提到:
请注意,绑定不会立即更新。恩伯等到全部 您的应用程序代码在同步之前已经完成运行 变化
这是我无法获取代码中绑定属性值的原因吗? “应用程序代码已经完成运行”实际意味着什么?
答案 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”。