我觉得操作按钮这一列这样做不好:
需要手动写html放到列中
提交的时候获取值不方便
我觉得可以做成一个combobox
grid加 cellediting , 操作按钮列的editor 是一个 combobox
在cellediting的beforeedit事件中动态给combobox赋值 , 就是你的record.get("buttons")的值写道combobox
cellediting可以在edit事件中将combobox的值给一个字段
关于行选中的问题 , 那是因为点击了 操作按钮 列就出发了 select 事件 , 这个比较容易 , 可以在grid的 checkboxselectionmodel 中设置 checkOnly = true , 这样只有点击表格第一列的 checkbox 才会选中(取消) 选择行
//列
{header:"操作按钮" , dataIndex:"operator" ,
//编辑器是一个combobox , 可以多选
editor: Ext.create("Ext.form.field.ComboBox" , {
//随便设置一个store , 为了向俩面加入值
store: new Ext.data.JsonStore({
field: ["value" , "text"] ,
data: []
}) ,
displayField: "text" ,
valueField: "value" ,
multiSelect: true
})
}}
//plugins : cellediting
plugins: {
ptype: "cellediting" ,
listeners:{
//设置beforeedit事件 , 为了改变comboBox值
beforeedit: function(pl , context){
var grid = context.grid ,
record = context.record ,
column = context.column ,
comboBox = column.editor;
//如果不是编辑 操作按钮 这列 , 返回
if (context.field != "operator") return;
//如果没有可以选择的项目 , 则不可以编辑
var bs = record.get("buttons");
if (bs.length == 0) return false;
//生成一个json, 可以加载到combobox的store中
var data = [];
Ext.each(bs , function(n){
data.push({text: n.name , value:n.id});
});
comboBox.store.loadData(data);
}
}
}
//选中行的问题
selModel:{
selType: "checkboxmodel" ,
checkOnly: true
}