2013-11-14 8 views
5

The bug source code is here.I manubri Meteor {{#if}} trasformano le stringhe in oggetti

Diciamo che sto girando su un array in Meteor usando un normale ciclo {{#each}}. Ogni elemento dell'array è una stringa e io invio la stringa in ogni passo usando {{this}}. Fin qui tutto bene! Se utilizzo un helper manubrio per controllare typeof per this, otterrò string. Dolce! Tutto è come dovrebbe essere.

Ma se posso aggiungere un {{#if something }} -helper all'interno del {{#each}} (la something appena restituisce true e mantiene quindi andare e uscite {{this}}) la stringa saranno ancora guardare bene nel codice HTML, ma è ormai un object nel controllo typeof!

Questo è super-fastidioso poiché tutto il (typeof someVarINeedToTest === 'string') del mio codice potrebbe dipendere dal momento in cui restituirà false.

Sto facendo qualcosa di sbagliato?

Oppure è un bug vero?

In tal caso: si tratta di un bug specifico di Meteor o di Manubrio?

Grazie!

Oh: the source link again. Basta tirare ed eseguire meteor e cercare nella console del browser.

risposta

5

Questo perché la variabile this dovrebbe essere sempre un oggetto in JavaScript in modo che quando viene chiamato in someFunction.apply(someContext); dal manubrio, JavaScript trasforma someContext in un oggetto, non importa quello che è iniziato come. Vedi un esempio qui: http://jsfiddle.net/SyKSE/1/

(. In questo caso, someFunction rappresenta la parte del modello che è all'interno dell'istruzione {{#if}})

Un semplice (seppur brutto) soluzione potrebbe essere quella di passare appena sempre i vostri dati come un oggetto, in modo da

['this', 'is', 'an', 'array', 'that', 'we\'re', 'looping', 'through']; 

diventa:

[{val: 'this'}, {val: 'is'}, {val: 'an'}, {val: 'array'}, {val: 'that'}, {val: 'we\'re'}, {val: 'looping'}, {val: 'through'}]; 

E si dovrà modificare il modello di guarda val invece di this

+1

Cheers, ottima risposta! –

+0

Grazie - bel lavoro su come creare un caso di test facile da usare :) –

+0

Un'altra soluzione alternativa è possibile utilizzare nel caso di confronto di stringhe: _.isEqual (this, stringToCompareAgainst). Si noti inoltre che Template.currentData() restituisce una stringa non un oggetto – JobJob

Problemi correlati