3

私はEmber.jsを学び始めたばかりで、http: //emberjs.com/でドキュメントを読んでいます。バインディングセクションで、次のコードをコピーして貼り付け、Chromeブラウザで実行しました。バインドされたデータ(App.husband.get('householdIncome'))は常に'undefined'を返しました。なぜなのかご存知ですか?コードが機能しない理由を知りたいのですが。

-----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() の前に置く必要があります。その理由は、バインドされたプロパティを接続する 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 に答える