Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免单击两次以开始编辑Backgrid中的布尔(复选框)单元格_Javascript_Backbone.js_Backgrid - Fatal编程技术网

Javascript 避免单击两次以开始编辑Backgrid中的布尔(复选框)单元格

Javascript 避免单击两次以开始编辑Backgrid中的布尔(复选框)单元格,javascript,backbone.js,backgrid,Javascript,Backbone.js,Backgrid,我们正在使用Backgrid,发现要开始编辑Backgrid中的“布尔”(复选框)单元格,必须单击两次:第一次单击将被忽略,并且不会切换复选框的状态。理想情况下,我们会找到导致这种行为的根源(例如,调用了preventDefault)并在那里解决它,但我一开始尝试了一种不同的方法,对BooleanCell的enterEditMode方法进行了以下扩展,这似乎是一个合乎逻辑的地方,因为在进入编辑模式时,复选框单击被忽略 问题是我的尝试还切换了以前编辑的复选框的状态。这是代码 var Boolean

我们正在使用Backgrid,发现要开始编辑Backgrid中的“布尔”(复选框)单元格,必须单击两次:第一次单击将被忽略,并且不会切换复选框的状态。理想情况下,我们会找到导致这种行为的根源(例如,调用了preventDefault)并在那里解决它,但我一开始尝试了一种不同的方法,对BooleanCell的enterEditMode方法进行了以下扩展,这似乎是一个合乎逻辑的地方,因为在进入编辑模式时,复选框单击被忽略

问题是我的尝试还切换了以前编辑的复选框的状态。这是代码

var BooleanCell = Backgrid.BooleanCell.extend({
    /*
    * see https://github.com/wyuenho/backgrid/issues/557
    */
    enterEditMode: function () {
        Backgrid.BooleanCell.prototype.enterEditMode.apply(this, arguments);
        var checkbox = this.$('input');
        checkbox.prop('checked', !checkbox.prop('checked'));
    }
});

以下似乎有效:

var BooleanCell = Backgrid.BooleanCell.extend({
    editor: Backgrid.BooleanCellEditor.extend({
        render: function () {
            var model = this.model;
            var columnName = this.column.get("name");
            var val = this.formatter.fromRaw(model.get(columnName), model);

            /*
             * Toggle checked property since a click is what triggered enterEditMode
            */
            this.$el.prop("checked", !val);
            model.set(columnName, !val);

            return this;
        }
    })
});
这是因为render方法在单击时被Backgrid.BooleanCell的enterEditMode方法调用,并且所述方法销毁并重新创建复选框,如下所示,但这样做会丢失原始“非编辑模式”复选框的选中状态(单击后)

更简单的方法是:

var OneClickBooleanCell = Backgrid.BooleanCell.extend({
  events: {
    'change input': function(e) {
      this.model.set(this.column.get('name'), e.target.checked);
    },
  },
});

这完全绕过了CellEditor机制,只是通过更新模型对复选框上的输入事件作出反应。

仔细检查后,上一个复选框的模糊部分出现了一些问题,导致首先切换它。我记录了$this('input'),它正确地返回了一个元素。我想我需要找到根本原因,而不是用绷带。
var OneClickBooleanCell = Backgrid.BooleanCell.extend({
  events: {
    'change input': function(e) {
      this.model.set(this.column.get('name'), e.target.checked);
    },
  },
});