(Ember.js) obtenir des rendements de propriété Binding undefined
-
27-10-2019 - |
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?
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>