質問

コードは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".

公式の紹介に言及した:

バインディングはすぐに更新されないことに注意してください。 Emberは、変更を同期する前にすべてのアプリケーションコードが実行が終了するまで待ちます

これが、コード内のバインディングプロパティの値を取得できない理由ですか? 「アプリケーションコードが実行が終了した」とはどういう意味ですか?

役に立ちましたか?

解決

このようなバインディングを持っているオブジェクトで遊んでいるときは、バインディングを手動でトリガーして同期する必要があります 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/

他のヒント

最初のアプリケーションコードが実行された後、本質的に発火するオブザーバーを追加する必要があります。

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

で「addobserver」を探します ember.jsはじめに.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top