Question

Le code est de la ember.js introduction officielle:

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

Je tente d'afficher la valeur de retour de App.country.get("presidentName");, donc j'enveloppa avec alerte, mais l'alerte affiche toujours undefined. La partie filaire est si j'exécuter cette instruction dans la console Firebug, il affiche correctement ce qui est "Barack Obama".

L'introduction officielle mentionné:

Notez que les liaisons ne mettent pas à jour immédiatement. Ember attend jusqu'à ce que tous votre code d'application a fini d'exécuter avant la synchronisation modifications

Est-ce la raison pour laquelle je ne peux pas obtenir la valeur de la propriété de liaison dans le code? Que signifie « code d'application a fini d'exécuter » signifie réellement?

Était-ce utile?

La solution

Quand vous jouez autour avec des objets qui ont des liaisons comme celui-ci, vous devez déclencher manuellement les liaisons de synchronisation avec 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") );

Voici un jsFiddle l'exemple: http://jsfiddle.net/ebryn/3Ctns/

Autres conseils

Vous devez ajouter un observateur qui essentiellement les feux après l'exécution du code d'application initiale.

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

Rechercher 'addObserver' dans le ember.js l'introduction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top