2012-04-13 153 views
3

我剛開始學習Ember.js,並在http://emberjs.com/處讀取了文檔。 在綁定部分,我剛剛複製了&粘貼的以下代碼,並在Chrome瀏覽器上執行它。綁定數據(App.husband.get('householdIncome'))總是返回'undefined'。你知道爲什麼嗎?我想知道爲什麼我的代碼不起作用。EmberJS綁定不起作用

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

回答

6

您需要在.get()之前放置Em.run.sync();。這是因爲連接綁定屬性的Ember的RunLoop尚未完成運行。通過使用Em.run.sync();,您強制RunLoop在隨後的任何代碼之前運行完成。這可能看起來不方便,但通常,在聲明帶有綁定屬性的對象後,您不需要很快調用.get(),因爲RunLoop將最終將這些屬性連接到Handlebars模板,從而正確顯示這些值。但在某些情況下,您需要立即綁定這些屬性,在這種情況下,您使用Em.run.sync()

看到這個的jsfiddle:http://jsfiddle.net/edwG6/

而且,你會在第一綁定部分http://emberjs.com發現一個非常類似的例子。注意// Later, after Ember has resolved bindings...

+0

也請看看http://stackoverflow.com/q/9978354/65542 – pangratz 2012-04-13 09:34:37

+0

+1爲上述鏈接 – 2012-04-13 13:48:37

+0

嗨亞歷山大,非常感謝。 Em.run.sync()解決了這個問題。 – hideki 2012-04-13 18:12:08