我们正在使用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'));
}
});
答案 0 :(得分:1)
以下似乎有效:
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方法会调用render方法,并且所述方法会破坏并重新创建复选框,如下所示,但这样做会丢失原始“non”的已检查状态(单击后) -edit-mode“复选框
this.$el.empty();
this.$el.append(this.currentEditor.$el);
this.currentEditor.render();
答案 1 :(得分:1)
更简单的方法:
var OneClickBooleanCell = Backgrid.BooleanCell.extend({
events: {
'change input': function(e) {
this.model.set(this.column.get('name'), e.target.checked);
},
},
});
这完全绕过了CellEditor机制,只是通过更新模型对复选框上的输入事件作出反应。