(ember.js) Erhalten Sie die Bindungseigenschaftsrückgabe undefined
-
27-10-2019 - |
Frage
Der Code stammt aus der offiziellen Einführung von 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>
Ich habe versucht, den Rückgabewert von anzuzeigen App.country.get("presidentName");
Also habe ich es mit Alarm eingewickelt, aber die Alarmanlage zeigt immer undefined
. Der kabelgebundene Teil ist, wenn ich diese Aussage in Firebug -Konsole ausführe, es ist richtig angezeigt, was ist "Barack Obama"
.
Die offizielle Einführung erwähnte:
Beachten Sie, dass Bindungen nicht sofort aktualisieren. Ember wartet, bis der gesamte Anwendungscode ausgeführt wurde, bevor Änderungen synchronisiert werden
Ist dies der Grund, warum ich den Wert der Bindungseigenschaft im Code nicht erhalten kann? Was bedeutet "Anwendungscode hat ausgeführt" tatsächlich?
Lösung
Wenn Sie mit Objekten mit solchen Bindungen herumspielen, müssen Sie die Bindungen manuell aus auslösen, um mit zu synchronisieren 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") );
Hier ist ein JSFiddle mit dem Beispiel: http://jsfiddle.net/ebryn/3ctns/
Andere Tipps
Sie müssen einen Beobachter hinzufügen, der im Wesentlichen nach dem Ausführen des anfänglichen Anwendungscodes abfeuert.
<!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>
Suchen Sie nach "Addobserver" in der Ember.js Einführung.