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>"; } }
展开
 我来答
让你笑了
推荐于2016-07-27 · TA获得超过572个赞
知道小有建树答主
回答量:227
采纳率:50%
帮助的人:289万
展开全部
  1. 我觉得操作按钮这一列这样做不好:

    1. 需要手动写html放到列中

    2. 提交的时候获取值不方便

    3. 我觉得可以做成一个combobox

      1. grid加 cellediting , 操作按钮列的editor 是一个 combobox 

      2. 在cellediting的beforeedit事件中动态给combobox赋值 , 就是你的record.get("buttons")的值写道combobox

      3. cellediting可以在edit事件中将combobox的值给一个字段

  2. 关于行选中的问题 , 那是因为点击了 操作按钮 列就出发了 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()

应该就没有问题了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式