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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top