【发布时间】:2014-03-31 18:43:00
【问题描述】:
使用来自网络的示例,我尝试实现我自己的自定义组合框 (YesNoEditor),它允许保存显示和值成员。这个想法是让 SELECT 标记的 HTML 输出包含选项值和要显示的实际文本,如下所示:
("<SELECT tabIndex='0' class='editor-yesno'><OPTION value='valuemember'>DisplayMember</OPTION></SELECT>");
这是我修改后的来自 slick.editors.js 的 YesNoEditor 版本
function YesNoSelectEditor(args) {
var $select;
var defaultValue;
var scope = this;
this.init = function () {
if (args.column.options && args.column.display) {
opt_display = args.column.display.split(',');
opt_values = args.column.options.split(',');
} else {
opt_values = "yes,no".split(',');
}
option_str = "";
for (i in opt_values) {
v = opt_values[i];
d = opt_display[i];
option_str += "<OPTION value='" + v + "'>" + d + "</OPTION>";
}
$select = $("<SELECT tabIndex='0' class='editor-select'>" + option_str + "</SELECT>");
$select.appendTo(args.container);
$select.focus();
};
this.getDefaultValue = function () {
return defaultValue;
};
this.destroy = function () {
$select.remove();
};
this.focus = function () {
$select.focus();
};
this.loadValue = function (item) {
defaultValue = item[args.column.field];
$select.val(defaultValue);
};
this.getSelectValue = function () {
if (args.column.options) {
return $select.val();
}
}
this.serializeValue = function () {
if (args.column.options) {
return $select.children("option:selected").text();
} else {
return ($select.val() == "yes");
}
};
this.applyValue = function (item, state) {
item[args.column.field] = state;
};
this.isValueChanged = function () {
return ($select.val() != defaultValue);
};
this.validate = function () {
return {
valid: true,
msg: null
};
};
this.init();
}
这主要是有效的,除了当我尝试手动单击组合框时,它偶尔会将文本值更改为之前选择的值以外的值。例如,组合框的显示值可能为 2,但当我单击单元格以激活组合框时,显示值变为 1。
有什么好的替代方法来完成我需要的吗?
-----编辑2
这是我如何使用 YesNoEditor 定义列的示例
{ id: "Type", name: "Customer Type", width: 100, field: "Type", editor: Slick.Editors.YesNoSelect, options: customerTypeList.join(","), display: customerTypeList.join(",")},
【问题讨论】:
标签: javascript jquery html combobox slickgrid