Sto seguendo lo documentation su emberjs.com, ma non riesco a far funzionare il primo esempio di bind.Impossibile recuperare i binding ember come documentato
Ho creato un jsfiddle da dimostrare. Cosa mi manca?
Sto seguendo lo documentation su emberjs.com, ma non riesco a far funzionare il primo esempio di bind.Impossibile recuperare i binding ember come documentato
Ho creato un jsfiddle da dimostrare. Cosa mi manca?
Ember.js utilizza il concetto di un RunLoop per consentire associazioni, osservatori e così via.
Il problema con l'esempio è che impostando una proprietà (associata) e ottenendo immediatamente il valore tramite console.log
non viene generato alcun evento che attiva il RunLoop e quindi sincronizza le modifiche. Ci sono 2 post di blog eccellenti su RunLoop: Part 1 e Part 2. Sebbene abbiano come target Sproutcore, il concetto è lo stesso per Ember.js.
Ci sono due modi per far funzionare il tuo esempio.
sincronizzazione Forza via Ember.run.sync()
Come dichiarano documenti, invocando Ember.run.sync()
... è un modo utile per forzare immediatamente tutti gli attacchi nella domanda per sincronizzare. Questo lascia il codice come questo, vedere http://jsfiddle.net/pangratz666/cwR3P/
App = Ember.Application.create({});
App.wife = Ember.Object.create({
householdIncome: 80000
});
App.husband = Ember.Object.create({
householdIncomeBinding: 'App.wife.householdIncome'
});
// force bindings to sync
Ember.run.sync();
console.log(App.husband.get('householdIncome')); // 80000
// Someone gets raise.
App.husband.set('householdIncome', 90000);
// force bindings to sync
Ember.run.sync();
console.log(App.wife.get('householdIncome')); // 90000
o la seconda opzione è quella di ...
mostrare i valori in una visualizzazione
mostra le proprietà di una vista gestisce tutto il materiale RunLoop per te, vedi http://jsfiddle.net/pangratz666/Ub97S/
Java Script:
App = Ember.Application.create({});
App.wife = Ember.Object.create({
householdIncome: 80000
});
App.husband = Ember.Object.create({
householdIncomeBinding: 'App.wife.householdIncome'
});
// invoke function in 3000ms
Ember.run.later(function() {
// someone gets a raise
App.husband.set('householdIncome', 90000);
}, 3000);
Manubrio (la vista):
<script type="text/x-handlebars" >
Wifes income: {{App.wife.householdIncome}}<br/>
Husbands income: {{App.husband.householdIncome}}
</script>
Avrai bisogno di chiamare Ember.run.sync();
dopo aver impostato i tuoi binding per dare al ciclo di Ember la possibilita 'di sincronizzare prima delle tue dichiarazioni di log. Questa è una pratica tecnica per testare anche con Ember, ma in genere non è necessaria nelle app Ember.
Con la vista, si può anche utilizzare l'Ember.run.sync(), ma solo una chiamata è quindi necessario. http://jsfiddle.net/akLVy/10/ –
Ben fatto, Clemens - molto utile! Penso che sia necessario spiegarlo molto meglio nei documenti. Non è una buona introduzione per i principianti quando uno degli esempi non viene eseguito "così com'è". –
Grazie! Dan, sono completamente d'accordo. Questo deve essere aggiornato nei documenti! – pangratz