2013-01-11 11 views
7

Mi chiedo se il registerBoundHelper in ember sia mai stato concepito per essere in grado di gestire gli helper stile blocco. Ad esempio, ho creato il seguente:Helper Block Helber

Ember.Handlebars.registerBoundHelper('unlessUndefined', (context, options) -> 
    unless typeof context == "undefined" 
    return options.fn(this) 
    else 
    return options.inverse(this) 
) 

L'idea è di usarlo come tale:

{{#unlessUndefined choice}} 
    {{#if choice}} 
    <p>You chose yes</p> 
    {{else}} 
    <p>You chose no</p> 
    {{/if}} 
{{else}} 
    <p>Make a choice</p> 
{{/unlessUndefined}} 

L'option.fn (this) parti di cose non sembrano rendere qualsiasi uscita. Quando faccio questo, ricevo un errore nella console che dice: "Non puoi usare appendChild al di fuori del processo di rendering"

Se questo non è possibile, forse qualcuno può suggerire un altro modo per ottenere un blocco condizionale che mostra solo se il valore associato non è indefinito?

risposta

4

Ho appena trascorso un sacco di tempo a combattere questo e ho trovato una sorta di correzione. Ho esaminato la richiesta pull con l'implementazione del metodo registerBoundHelper.

ho aggiunto la seguente sopra di questa linea: https://github.com/emberjs/ember.js/pull/1274/files#L0R357

Ember.run.scheduleOnce('render', view, 'rerender') 

Sembra che il metodo boundHelper avvolge solo il metodo di supporto originale e crea una vista anonima. L'unico problema è che l'osservatore mette la vista anonima in modalità render senza mettere la vista originale nella stessa prima.

Almeno questo è quello che penso stia succedendo. Ad ogni modo, ora funziona per me. Forse questo è un bug?

+1

Ciao Paul. Grazie per aver postato queste informazioni. Al momento sto eseguendo la versione principale di Ember, quindi non sono riuscito a mettere in pratica la soluzione. Comunque penso che tu abbia ragione sul fatto che la vista originale non venga rerenderizzata. Con le modifiche apportate, non è così facile come aggiungere la linea che menzioni come fanno il rerender all'interno di una funzione e il contesto di quella funzione non ha accesso alla vista originale. Probabilmente vale la pena aprire un bug su questo una volta che posso restringere il comportamento. –

+0

c'è ancora un problema? –

+0

non trovato nessuno, uno aperto: https://github.com/emberjs/ember.js/issues/2237 –