Использование ручек bindAttr для флажка

Я использую handlebars в приложении backbone.js rails, и у меня есть логическое поле, которое я заполняю флажком.

Когда я загружаю страницу редактирования, форма заполняется содержимым с сервера JSON что-то вроде

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

теперь в моей форме дескриптора, я хочу показать, что флажок равен 1.

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

но это не возвращает установленный флажок. Мне бы очень хотелось просто сказать if checkbox==1, но я не вижу, как я могу это сделать с помощью рулей.

Anysuggestions??

Ответ 1

То, что вы обычно делаете, использует логическое значение в "модели".

{
    isChecked: true
}

а затем

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

Если логическое значение true, оно отобразит свойство checked, и если логическое значение false, оно опустит свойство. Поэтому, если isChecked истинно, тогда Handlebars выдаст

<input type="checkbox" checked>

и если isChecked были ложными, мы получили бы

<input type="checkbox">

Это то, что мы хотим!

Ответ 2

Я также написал помощника, чтобы сделать это. Он не использует backbone.js, поэтому может быть альтернативой для некоторых:

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

Пример использования:

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

Отметьте флажок, если поставляемый JSON был:

{"cbxExample" : "1"}

Результат:

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

[мой первый пост - надеюсь, что это полезно!]

Ответ 3

В результате я использовал помощник руля.