2015-01-05 8 views
9

Ember sta migrando ad un helper non-context switching#each. Per un pezzo di compatibilità ho bisogno di fare lo stesso da manubri grezzi.Come si aggiunge "ciascuno in" per lavorare nel manubrio

Tuttavia il trivial attempt fails

var f = Handlebars.compile("{{#each numbers}}{{this}}{{/each}}"); 
console.log(f({numbers: [1,2,3]})); 
// works 

var f2 = Handlebars.compile("{{#each number in numbers}}{{number}}{{/each}}"); 
console.log(f2({numbers: [1,2,3]})); 
// fails 

Come raggiungo {{#each number in numbers}} per lavorare in manubri prime 2.0?

EDIT

Aggiunto una taglia qui, per un'estensione di manubri in base al largo https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/lib/ember_compat_handlebars.js che ci dà ogni .. a sostegno. È chiaro che non è incorporato nel manubrio. Ember è anche in grado di estenderlo.

+0

Penso che sia un bug. Anche se utilizziamo Em.Handlebars.compile, se fornisci un errore 'Impossibile leggere la proprietà' controller 'di undefined' – blessenm

+0

Le funzioni precompilate di Ember si aspettano un ulteriore contesto che non è fornito semplicemente passando l'hash. Si aspetta viste, contenitori, controllori, i lavori. – Kingpin2k

risposta

4

Questo mostra come può essere fatto. Notare che richiede il flag stringParams in fase di compilazione, che cambia il modo in cui vengono richiamati tutti gli helper, quindi questo probabilmente interromperà tutti gli altri helper a meno che non si forniscano versioni compatibili di stringParams.

+0

nice Ho già param di stringa quindi dovrei essere al sicuro! –

+0

@SamSaffron, questa non dovrebbe essere la risposta accettata? Sembra che sia stato aggiunto alla tua estensione su github. – redbmk

4

Lo scambio non di contesto di ogni helper è un helper introdotto in Ember, non fa parte della libreria core dei manubri. Non sarai in grado di usarlo con semplici manubri ol.

+0

ha avuto una chat con i wycats e lo ha confermato, lo abbiamo già ignorato https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/lib/ember_compat_handlebars.js quindi ho solo bisogno di capire quale magia ho bisogno di aggiungere lì –

+0

Quello che non è tutto il manubrio dato dal manubrio non ha parametri di blocco di cambio di contesto sul master già come per la mia risposta e jsbin funzionante. –

2

Se ho capito bene la domanda, credo che funzionerà.

var hbs = "{{#each this}}{{this}}{{/each}}"; 
var f3 = Handlebars.compile(hbs); 
console.log(f3({numbers: [1,2,3]})); 
console.log(f3({numbers: [3,2,1]})); 

http://jsbin.com/tebayupobu/4/edit

2

Forse non è necessario implementare questo a tutti dal manubrio si sta muovendo per bloccare i parametri per aiutanti non cambio di contesto. Ember sta già utilizzando i parametri di blocco in 1.10 Beta (puoi leggere i parametri di blocco nello release notes).

È possibile utilizzare l'ultima build di Handlebars per ottenere il non cambio di contesto ciascuno con la nuova sintassi del blocco params in questo momento:

var f = Handlebars.compile("{{#each numbers}}{{this}}{{/each}}"); 
console.log(f({numbers: [1,2,3]})); 

var f = Handlebars.compile("{{#each numbers as |number|}}{{number}}{{/each}}"); 
console.log(f({numbers: [1,2,3]})); 

Console:

"123" 
"123" 

Aggiornato JSBin con la nuova sintassi .

Problemi correlati