带有内联编辑的 Slick Grid SelectBox,它在选择值后显示文本
Slick Grid SelectBox with inline Edit which displays Text after Selecting values
我正在尝试用光滑的网格表示数据。但就我而言,大部分数据都以 select 框的形式出现。我从这里检查 SelectCellEditor Option 上的选项。但是对于保存时动态填充的值,如果我们可以使用 post 数据使用值并在网格中显示文本,将会很有帮助。为此,我修改了我的数据如下
function SelectCellEditor(args) {
var $select;
var defaultValue;
var scope = this;
this.init = function() {
option_str = "";
args.column.options.forEach(function(data)
{
option_str += "<OPTION value='"+data.key+"'>"+data.value+"</OPTION>";
});
$select = $("<SELECT tabIndex='0' class='editor-select'>"+ option_str +"</SELECT>");
$select.appendTo(args.container);
$select.focus();
};
this.destroy = function() {
$select.remove();
};
this.focus = function() {
$select.focus();
};
this.loadValue = function(item) {
defaultValue = item[args.column.field];
$select.val(defaultValue);
};
this.serializeValue = function() {
if(args.column.options){
return $select.val();
}
};
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();
}
但我的问题是我无法在初始加载时加载文本值,并且在 select 从下拉单元格中取值后用值代替 select 文本。在这个例子中,我生成了如下格式的数据
var data =[{"key":"1","value":"Item1"},{"key":"2","value":"item2"}];
您还应该在列定义中添加 formatter
。例如
{id:'id',name:'thename',...,options:data, editor: SelectCellEditor,formatter:SelectCellFormatter}
其中 SelectCellFormatter:
SelectCellFormatter: function(row,cell,value,columnDef, dataContext){
// filter options based on key value
var ret = columnDef.options.filter(function(a){return a.key==value})
// return the value
if(ret.length>0){
return ret[0].value;
} else {
return null;
}
}
我正在尝试用光滑的网格表示数据。但就我而言,大部分数据都以 select 框的形式出现。我从这里检查 SelectCellEditor Option 上的选项。但是对于保存时动态填充的值,如果我们可以使用 post 数据使用值并在网格中显示文本,将会很有帮助。为此,我修改了我的数据如下
function SelectCellEditor(args) {
var $select;
var defaultValue;
var scope = this;
this.init = function() {
option_str = "";
args.column.options.forEach(function(data)
{
option_str += "<OPTION value='"+data.key+"'>"+data.value+"</OPTION>";
});
$select = $("<SELECT tabIndex='0' class='editor-select'>"+ option_str +"</SELECT>");
$select.appendTo(args.container);
$select.focus();
};
this.destroy = function() {
$select.remove();
};
this.focus = function() {
$select.focus();
};
this.loadValue = function(item) {
defaultValue = item[args.column.field];
$select.val(defaultValue);
};
this.serializeValue = function() {
if(args.column.options){
return $select.val();
}
};
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();
}
但我的问题是我无法在初始加载时加载文本值,并且在 select 从下拉单元格中取值后用值代替 select 文本。在这个例子中,我生成了如下格式的数据
var data =[{"key":"1","value":"Item1"},{"key":"2","value":"item2"}];
您还应该在列定义中添加 formatter
。例如
{id:'id',name:'thename',...,options:data, editor: SelectCellEditor,formatter:SelectCellFormatter}
其中 SelectCellFormatter:
SelectCellFormatter: function(row,cell,value,columnDef, dataContext){
// filter options based on key value
var ret = columnDef.options.filter(function(a){return a.key==value})
// return the value
if(ret.length>0){
return ret[0].value;
} else {
return null;
}
}