Domanda

Il codice proviene dall'introduzione ufficiale di 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>

Stavo cercando di visualizzare il valore di ritorno di App.country.get("presidentName");, così l'ho avvolto con avviso, ma l'allerta viene sempre visualizzato undefined. La parte cablata è se eseguo questa affermazione nella console Firebug, visualizza correttamente quale sia "Barack Obama".

L'introduzione ufficiale menzionata:

Si noti che i legami non si aggiornano immediatamente. Ember attende fino a quando tutto il codice dell'applicazione abbia terminato in esecuzione prima di sincronizzare le modifiche

È questo il motivo per cui non riesco a ottenere il valore della proprietà vincolante nel codice? Cosa significa effettivamente il "codice dell'applicazione"?

È stato utile?

Soluzione

Quando stai giocando con oggetti che hanno attacchi come questo, devi innescare manualmente i legami con cui sincronizzare 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") );

Ecco un jsfiddle con l'esempio: http://jsfiddle.net/ebryn/3ctns/

Altri suggerimenti

È necessario aggiungere un osservatore che essenzialmente spara dopo l'esecuzione del codice dell'applicazione iniziale.

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

Cerca "Addobserver" nel Ember.js Introduzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top