EXTJS4 两个问题。 1 操作按钮项动态生成,但不是标准搞法。2 行的选中问题

2025-05-14 09:41:40
推荐回答(1个)
回答(1):

  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
}