【问题标题】:Extjs : How to enable/disable a checkbox using renderer while loading a gridExtjs:如何在加载网格时使用渲染器启用/禁用复选框
【发布时间】:2014-10-14 21:11:24
【问题描述】:

我需要根据我得到的查询结果加载一个网格。在网格中加载文本字段时我没有任何问题,但是有一个特定的列是复选框类型。为此,我正在使用 xtype: 'checkcolumn'。返回查询结果的对象为此特定列返回“Y”或“N”。如果是“Y”,我需要启用复选框,如果是“N”,则应该禁用复选框。 我正在使用以下代码来定义我的复选框字段。

 {
        xtype: 'checkcolumn',
        header: "Old User",
        disabled: true,
        disabledCls:'x-item-enabled',
        width: 170,
        dataIndex: 'oldUser',
        itemId: 'oldUser',
        renderer: this.checkOldUser
 }      

checkOldUser: function (oldUser) {
        if(oldUser== 'Y'){
              this.oldUser.setDisabled(false);
        }
    }

这个渲染器功能对我不起作用。渲染器应该是什么样子?你能告诉我如何解决这个问题吗?谢谢....

【问题讨论】:

    标签: extjs checkbox renderer


    【解决方案1】:

    哇,我认为这会更容易,但事实证明.. 没有那么多..

    你必须做两件事:

    1 - 更改检查列渲染器

    2 - 添加一个 beforecheckchange 侦听器以在用户单击值为“N”的记录时返回 false;

    您的最终网格应如下所示:

    Ext.create('Ext.grid.Panel', {
        height: 250,
        width: 579,
        title: 'My Grid Panel',
        defaultListenerScope: true,
        store: myStore,
        columns: [
            {
                xtype: 'gridcolumn',
                dataIndex: 'name',
                text: 'Name'
            },
            {
                xtype: 'checkcolumn',
                renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
                    var cssPrefix = Ext.baseCSSPrefix,
                        cls = cssPrefix + 'grid-checkcolumn';
    
    
                    if (this.disabled || value == 'N') {
                        metaData.tdCls += ' ' + this.disabledCls;
                    }
                    if (value) {
                        cls += ' ' + cssPrefix + 'grid-checkcolumn-checked';
                    }
    
                    return '<img class="' + cls + '" src="' + Ext.BLANK_IMAGE_URL + '"/>';
                },
                dataIndex: 'oldUser',
                text: 'OldUser',
                listeners: {
                    beforecheckchange: 'onCheckcolumnBeforeCheckChange'
                }
            }
        ],
    
        onCheckcolumnBeforeCheckChange: function(checkcolumn, rowIndex, checked, eOpts) {
            var row = this.getView().getRow(rowIndex),
                record = this.getView().getRecord(row);
            return (record.get('oldUser') != 'N');
        }
    });
    

    我创建了一个小提琴:https://fiddle.sencha.com/#fiddle/bqd

    【讨论】:

    • 非常感谢您的回答。这解决了我的问题。
    【解决方案2】:

    稍微简单的方法帮助了我

               renderer: function(val, metaData, rec) {
    
                  if (rec.get('usersSetId') == -1) {
                    metaData.tdCls += ' ' + this.disabledCls;
                  }
    
                  return (new Ext.ux.CheckColumn()).renderer(val, metaData);
    
                },
                listeners: {
                  beforecheckchange: function (the, rowIndex, checked, eOpts) {
                    var record = the.up('grid').getStore().getAt(rowIndex);
                    return (record.get('usersSetId') != -1);
                  }
                }
    

    【讨论】:

    • 小心这个解决方案!我目前正在开发一个实现它的项目(我猜他们在这里找到了它),当包含网格的视图被破坏时,这些用new Ext.ux.Checkcolumn() 创建的 CheckColumns 仍然存在。这导致我们遇到性能问题,因为 Ext.ComponentManager 和 DOM 大小不断增加。
    【解决方案3】:
    renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {         
    
    if(record.data.taskStatus == 'Success' || record.data.acknowledgeBak == true){ 
        metaData.css = " x-item-disabled"; 
      }
      return (new Ext.grid.column.CheckColumn).renderer(value);
      },
      listeners: {
      beforecheckchange: function (the, rowIndex, checked, eOpts) {
        var record = the.up('grid').getStore().getAt(rowIndex);
        return (record.get('taskStatus') != "Success" && record.get("acknowledgeBak") != true);
      }
    },
    

    【讨论】:

    • 我遇到的问题是我的renderer 函数只返回作为参数给出的value。没有修改value;只是直接未修改的返回。使用此处给出的构造返回它有效。我不知道为什么,也不认为这个问题符合我的问题。但它对我使用 ExtJS 6.0.0 有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2011-05-26
    • 2013-07-31
    • 2014-12-31
    相关资源
    最近更新 更多