使用把手bindAttr复选框

ped*_*ete 10 handlebars.js

我在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,但我不知道如何用把手做到这一点.

有什么建议??

Wil*_*der 9

你通常会做的是在'模型'中使用布尔值.

{
    isChecked: true
}
Run Code Online (Sandbox Code Playgroud)

然后

<input type="checkbox" {{bindAttr checked="isChecked"}}>
Run Code Online (Sandbox Code Playgroud)

如果Boolean为true,则它将呈现checked属性,如果Boolean为false,则将省略该属性.所以,如果isChecked是真的,那么Handlebars会输出

<input type="checkbox" checked>
Run Code Online (Sandbox Code Playgroud)

如果isChecked是假的,我们会得到

<input type="checkbox">
Run Code Online (Sandbox Code Playgroud)

这就是我们想要的!


Mat*_*att 8

我还写了一个帮手来做这件事.它不使用backbone.js,因此可能是某些选择:

Handlebars.registerHelper('checked', function(currentValue) {
    return currentValue == '1' ? ' checked="checked"' : '';
});
Run Code Online (Sandbox Code Playgroud)

用法示例:

<input type="checkbox" name="cbxExample" id="cbxExample" {{checked cbxExample}}/>
Run Code Online (Sandbox Code Playgroud)

如果提供的JSON是:勾选一个复选框:

{"cbxExample" : "1"}
Run Code Online (Sandbox Code Playgroud)

导致:

<input type="checkbox" name="cbxExample" id="cbxExample" checked="checked" />
Run Code Online (Sandbox Code Playgroud)

[我的第一篇文章 - 希望有用!]

  • 你可能想要使用一个三重```,以便`'`不会被转义.使用`{{cbxExample}}`输出实际上会在你的代码中被`checked =&quot; checked&quot;`. `{{{checked cbxExample}}}`,然后我们得到正确的输出(`checked ="checked"`). (3认同)