2012-04-13 17 views
3

Ich habe gerade angefangen, Ember.js zu lernen und die Doucmentation bei http://emberjs.com/ zu lesen. Im Binding-Abschnitt habe ich einfach & folgenden Code eingefügt kopiert und im Chrome-Browser ausgeführt. Binded-Daten (App.husband.get ('householdIncome')) gaben immer 'undefined' zurück. Weißt du, warum? Ich würde gerne wissen, warum mein Code nicht funktioniert.EmberJS Bindung funktioniert nicht

----- HTML-Code ------

<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 

----- - Ergebnisausgabe -----------

80000 
undefined 

Antwort

6

Sie müssen stellen Em.run.sync(); vor dem .get() s. Der Grund dafür ist, dass Embers RunLoop, der gebundene Eigenschaften verbindet, noch nicht fertig ist. Wenn Sie Em.run.sync(); verwenden, erzwingen Sie, dass der RunLoop vor jedem nachfolgenden Code vollständig ausgeführt wird. Dies mag wie eine Unannehmlichkeit erscheinen, aber normalerweise müssen Sie nicht so schnell nach dem Deklarieren von Objekten mit gebundenen Eigenschaften ".get()" aufrufen, da RunLoop diese Eigenschaften letztendlich mit den Lenkervorlagen verknüpft, die diese Werte korrekt anzeigen . In einigen Fällen müssen diese Eigenschaften jedoch sofort gebunden werden. In diesem Fall verwenden Sie Em.run.sync().

Sehen Sie diese jsfiddle: http://jsfiddle.net/edwG6/

Außerdem werden Sie ein sehr ähnliches Beispiel auf http://emberjs.com im ersten Bindungen Abschnitt bemerken. Beachten Sie den Kommentar // Later, after Ember has resolved bindings...

+0

Werfen Sie einen Blick auf http://stackoverflow.com/q/9978354/65542 – pangratz

+0

+1 für den obigen Link –

+0

Hallo Alexander, vielen Dank. Em.run.sync() hat das Problem gelöst. – hideki

Verwandte Themen