EXTJS4 两个问题。 1 操作按钮项动态生成,但不是标准搞法。2 行的选中问题
我这边原本选中了‘站点分组’‘模块按钮’2行数据,但是当我选中或者取消‘模块按钮’中的‘新增’或者‘删除’时。站点分组这行数据却又被取消选中了。动态生成按钮代码如下:{h...
我这边原本选中了‘站点分组’‘模块按钮’2行数据,但是当我选中或者取消‘模块按钮’中的‘新增’ 或者‘ 删除’时。 站点分组这行数据却又被取消选中了。
动态生成按钮代码如下:
{header:'操作按钮', dataIndex:'buttons', width:'50%', /*listeners:{ cellclick: function(grid, rowIndex, columnIndex, e) { alert(rowIndex); e.stopPropagation(); } },*/ renderer:function(data, cell, record, rowIndex, columnIndex, store){ var bs = record.get('buttons'); var mid="span"+record.get('id'); var str="<span id='"+mid+"'>"; for(var i=0;i<bs.length;i++){ var timestamp=new Date().getTime(); //v的值由角色id 模块id 按钮id组成 var v="0#"+record.get('id')+"#"+bs[i].id; var lab=bs[i].name+":<input type='checkbox' id='"+v+"' name='btname' value='"+v+"' />  "; str=str+lab; }; return str+"</span>"; } } 展开
动态生成按钮代码如下:
{header:'操作按钮', dataIndex:'buttons', width:'50%', /*listeners:{ cellclick: function(grid, rowIndex, columnIndex, e) { alert(rowIndex); e.stopPropagation(); } },*/ renderer:function(data, cell, record, rowIndex, columnIndex, store){ var bs = record.get('buttons'); var mid="span"+record.get('id'); var str="<span id='"+mid+"'>"; for(var i=0;i<bs.length;i++){ var timestamp=new Date().getTime(); //v的值由角色id 模块id 按钮id组成 var v="0#"+record.get('id')+"#"+bs[i].id; var lab=bs[i].name+":<input type='checkbox' id='"+v+"' name='btname' value='"+v+"' />  "; str=str+lab; }; return str+"</span>"; } } 展开
1个回答
展开全部
我觉得操作按钮这一列这样做不好:
需要手动写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
}
更多追问追答
追问
首先非常感谢你啊
comboBox.store.loadData(data);
comboBox为null
追答
那把上面第25行中
comboBox = column.editor
改成
comboBox = column.getEditor()
应该就没有问题了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询