2015-01-06 17 views
6

Ho uno scenario nel componente emberjs in cui l'osservazione non viene colpita. Ho scoperto il motivo come "il componente non è stato ancora inserito quando viene impostata la proprietà del componente che si sta osservando."L'osservatore componente ember js non funziona

Le mie domande sono, questo non potrebbe essere gestito in modo migliore in ember js?

Una spiegazione migliore può essere trovata nel seguente jsbin`s.

Not working Scenario

Working scenario

+0

Che cosa stai cercando di realizzare qui? In questo scenario, entrambe le funzioni dell'osservatore sarebbero meglio servite come proprietà calcolate (tramite 'Ember.Computed'). – awgreenarrow08

+0

D'accordo, gli osservatori sono eccessivi in ​​entrambe le situazioni – Kingpin2k

+0

Come ho menzionato nei commenti, questo era un esempio e non il caso d'uso effettivo. Il caso d'uso reale è enorme e ho pensato di farlo con il fiammifero. Fondamentalmente c'è un gran numero di calcoli nell'osservatore e non è solo assegnandolo ad un'altra proprietà Anche quando si dice "entrambe le funzioni di osservatore sarebbero meglio servite come proprietà calcolata" se si utilizza la proprietà calcolata nel componente non funzionerà a causa dello stesso motivo per cui l'osservatore non funziona – wallop

risposta

14

È possibile specificare .on('init') per costringere gli osservatori a correre a destra dopo l'inizializzazione; altrimenti come @ Kingpin2k accennato - non corrono

App.TextboxDisplayComponent = Ember.Component.extend({ 
    displayText: '',   

    boundProperty: '', 

    observeBoundProperty: function() { 
    this.set('displayText', this.get('boundProperty'));   
    }.observes('boundProperty').on('init') 
}); 

vostro (non) esempio di lavoro here

+1

esattamente quello che volevo grazie Quando ho provato questo ho pensato che l'osservatore verrà colpito solo "on ('init')" e non verrà colpito quando si verificano i normali cambiamenti. Ora l'ho testato e succede anche quando c'è un cambiamento – wallop

+0

Tuttavia ho appena capito perché non ho usato questo concetto prima, c'è un trucco con questo! observBoundProperty viene visualizzato su init anche se boundProperty non viene modificato. Se volessi che l'osservatore venisse colpito solo con il cambiamento, non sarebbe di grande aiuto:) Ma tuttavia potrei avere un controllo delle condizioni al suo interno e, soprattutto, è una versione molto più pulita! – wallop