Backbone.syphon处理多个复选框

dbr*_*rin 1 javascript jquery backbone.js backbone-views marionette

今天陷入了虹吸障碍.

对于特定的用例,它似乎无法处理将表单值序列化为JSON:一组复选框,每个复选框都带有一个单独的值,但所有复选框都相同.

<input type="checkbox" name="cats" value="Whiskey">
<input type="checkbox" name="cats" value="Tango">
<input type="checkbox" name="cats" value="Cash">
Run Code Online (Sandbox Code Playgroud)

我重写了复选框阅读器,给了我复选框的值:

Backbone.Syphon.InputReaders.register('checkbox', function(el){
        return el.val();  //fetch value not the boolean
    });
Run Code Online (Sandbox Code Playgroud)

现在我得到的是最后一个选定的值,而不是预期的所有选定值的数组.

有没有人处理过这个?

dbr*_*rin 5

经过几个小时的努力,我做了一些发现:

  1. API文档和带注释的代码库与我下载的实际最新代码不匹配.事实上它有点不同.

  2. 检查密钥(输入的名称属性)以确定如何序列化其数据.

借助这些知识,我可以通过执行以下三项操作将我的复选框值作为一个值数组:

  1. 注册特定于复选框的输入读取器以返回值属性.
  2. 注册复选框验证器仅从复选框中收集值.
  3. 将括号添加到name属性以指示数组输入.

.

 Backbone.Syphon.InputReaders.register('checkbox', function (el) {
    return el.val();
 });

 Backbone.Syphon.KeyAssignmentValidators.register("checkbox", function ($el, key, value) {
    return $el.prop("checked");
 });

<input type="checkbox" name="cats[]" value="Whiskey">
<input type="checkbox" name="cats[]" value="Tango">
<input type="checkbox" name="cats[]" value="Cash">
Run Code Online (Sandbox Code Playgroud)