避免单击两次以开始编辑Backgrid中的布尔(复选框)单元格
Avoid clicking twice to begin editing boolean (checkbox) cell in Backgrid
我们正在使用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;
}
})
});
这是因为渲染方法被Backgrid调用。BooleanCell的enterEditMode方法在单击时,所述方法按如下方式销毁并重新创建复选框,但这样做会丢失原始"非编辑模式"复选框的选中状态(单击后)
this.$el.empty();
this.$el.append(this.currentEditor.$el);
this.currentEditor.render();
一种更简单的方法:
var OneClickBooleanCell = Backgrid.BooleanCell.extend({
events: {
'change input': function(e) {
this.model.set(this.column.get('name'), e.target.checked);
},
},
});
这完全绕过CellEditor机制,只通过更新模型来对复选框上的输入事件作出反应。
相关文章:
- javascript中的布尔条件
- 我的django模板布尔变量是't在javascript中按预期工作
- 在javascript中否定布尔函数
- 有条件地在选项标记中应用布尔属性
- 如何从javascript/jquery中的复选框中获取布尔值
- 将多个布尔检查简化为一个布尔检查
- 如何在谷歌日历图表中使用布尔型列
- KendoUI网格行过滤器,带有布尔值下拉列表
- 哪个布尔运算更快<或者<=
- php布尔值's小写AND大写和数字布尔值'可以接受
- DynamoDB本地PutItem中的布尔字段
- 如何“;默认“;JavaScript中的布尔属性
- 在javascript函数的循环中设置全局布尔变量的最佳语法
- 从WCF服务接收应答's布尔方法
- 启用具有多个布尔可观察标志的绑定
- 使用“;布尔“;作为JavaScript中.filter()的参数
- select中布尔值的Angularjs ng值不起作用
- 由于布尔值的变化,Django视图中的字符串格式不正确
- 递归布尔和/或到数组的jison解析器
- 避免单击两次以开始编辑Backgrid中的布尔(复选框)单元格