2012-01-30 9 views
10

Uso il manubrio in un'app di backbone.js e ho un campo booleano che sto compilando con una casella di controllo.utilizzando il manubrio bindAttr per la casella di controllo

Quando carico la pagina di modifica, il modulo viene popolato con il contenuto dal server JSON qualcosa come

 
{id:3,user:'test',checkbox:1} 

ora nella mia forma del manubrio, voglio dimostrare che la casella di controllo è 1.

 
< input type="checkbox" name="checkbox" value="1" {{#if checkbox}} {{bindAttr checkbox checked="isSelected"}}{{/if}} > 

ma questo non restituisce la casella di controllo selezionata. Mi piacerebbe davvero essere in grado di dire if checkbox==1, ma non vedo come posso farlo con i manubri.

Anysuggestions ??

risposta

-6

Ho finito per utilizzare un aiutante manubrio per questo.

+18

Puoi fornire un esempio in modo che altri possano imparare? –

9

Cosa si farebbe di solito, si sta utilizzando un booleano nel 'modello'.

{ 
    isChecked: true 
} 

e poi

<input type="checkbox" {{bindAttr checked="isChecked"}}> 

Se il booleano è vero, renderà la proprietà checked, e se la booleana è falso, sarebbe omettere la proprietà. Quindi, se isChecked è vero, allora Manubrio sarebbe uscita

<input type="checkbox" checked> 

e se isChecked erano falsi, otterremmo

<input type="checkbox"> 

che è quello che vogliamo!

+0

per un legame bidirezionale della proprietà "checked" dell'elemento al controller/contesto (in modo che il controller/contesto sia aggiornato quando la casella di controllo è selezionata) è possibile utilizzare un helper di input: '{{input type =" checkbox " checked = isChecked value = "1" data-unchecked-value = "0"}} ' (ma poiché 'data-unchecked-value' non è supportato dagli helper di input ember, vedere questo: http://stackoverflow.com/questions/9894335) –

7

Ho anche scritto un aiuto per farlo. Non usa backbone.js, quindi potrebbe essere un'alternativa per alcuni:

Handlebars.registerHelper('checked', function(currentValue) { 
    return currentValue == '1' ? ' checked="checked"' : ''; 
}); 

Esempio di utilizzo:

<input type="checkbox" name="cbxExample" id="cbxExample" {{checked cbxExample}}/> 

Sarebbe barrare una casella di controllo se la dotazione JSON era:

{"cbxExample" : "1"} 

Risultato:

<input type="checkbox" name="cbxExample" id="cbxExample" checked="checked" /> 

[il mio primo post: spero che sia utile!]

+3

Probabilmente vuoi usare una tripla '{' in modo che il '' 'non venga scappato con' {{checked cbxExample}} 'l'output sarà effettivamente' checked = " controllato " ' nel tuo codice. Con '{{{checked cbxExample}}}', otteniamo l'output corretto ('checked =" checked "'). –

+0

Questo mi ha aiutato ad affrontare JSON avendo ... controllato: "true" o "false" - come stringhe 'return currentValue == 'true'? 'checked': ''; ' – eon

Problemi correlati