首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在EXTJS的网格中使用时,afterrender不适用于combobox

在EXTJS的网格中使用时,afterrender不适用于combobox
EN

Stack Overflow用户
提问于 2012-08-22 11:30:26
回答 2查看 4.4K关注 0票数 0

这是我在网格中使用组合框的代码:

代码语言:javascript
运行
AI代码解释
复制
{
    header: 'FSCS',
    dataIndex: 'acntOvrrideTypeCd',
    flex: 1,
    renderer: function(val, metaData, record, rowIndex, colIndex) {
        var id = Ext.id();
        var store = new Ext.data.Store({
            fields: ['code', 'description'],
            data: [{
                "code": "",
                "description": ""
            }, {
                "code": "E",
                "description": "E"
            }, {
                "code": "D",
                "description": "D"
            }, {
                "code": "S",
                "description": "S"
            }]
        });

        Ext.Function.defer(
            (function() {
                var cb = Ext.create('Ext.form.ComboBox', {
                    id: 'acntOvrrideTypeCd-' + rowIndex,
                    queryMode: 'local',
                    renderTo: id,
                    store: store,
                    forceSelection: true,
                    triggerAction: 'all',
                    lazyRender: true,
                    size: 5,
                    valueField: 'code',
                    displayField: 'description',
                    value: val
                    //listeners:{
                    //    scope: this,
                    //    'select': Ext.getCmp('amlFscsForm').controller.amlShow(rowIndex)
                    //}

                });
                cb.on(afterrender, function() {
                    console.log("------- box---" + rowIndex);
                    Ext.getCmp('amlFscsForm').controller.amlShow(rowIndex);
                });
            }), 0.25);

        console.log("i----------" + id);
        return (Ext.String.format('<div id="{0}"></div>', id));
    }
}

未激发“‘afterrender”事件。我需要在组件渲染后启用或禁用组件。

有人能帮上忙吗?

EN

回答 2

Stack Overflow用户

发布于 2012-08-22 12:34:47

这只是一个拼写错误,afterrender应该用引号括起来,否则你只会为未定义的事件添加函数。

代码语言:javascript
运行
AI代码解释
复制
cb.on('afterrender',function(){
     console.log("------- box---" + rowIndex);
     Ext.getCmp('amlFscsForm').controller.amlShow(rowIndex);
});
票数 0
EN

Stack Overflow用户

发布于 2012-08-22 12:55:10

你的代码有一些问题。

  1. 看起来你正试图在网格的渲染器函数中创建一个组合框(顶部的代码没有包含在代码块中)。您最好改用Ext.grid.plugin.CellEditing插件,它将按需创建一个字段,而不是在列呈现时创建。此外,每次刷新网格视图时,都会为网格中的每一行创建另一个存储区和组合框。对性能不好,对用户体验也不好。
  2. 调用defer时,持续时间以毫秒为单位,而不是秒。此外,您也不需要将函数括在括号中。只要给它函数本身就行了。如下所示:

Ext.defer(function(){ // do stuff },25);

  • 仅当您的组件是某个容器的子级时才有效,该容器不会立即渲染所有组件(如选项卡面板)。

  • 除非您在创建时没有可用的信息,否则在组合框中设置禁用的配置可能会更容易,除非您在创建时没有可用的信息。

  • 说,当使用on方法时,您需要将事件指定为字符串。如果您使用listeners配置(您已将其注释掉),则只需执行以下操作:

监听器:{ Ext.getCmp('amlFscsForm').controller.amlShow(rowIndex);:function(){ box(“-console.log-”+ rowIndex);select: function(){ Ext.getCmp('amlFscsForm').controller.amlShow(rowIndex);} }

需要注意的是,这些侦听器函数的作用域默认为组件本身(您的组合框),因此scope: this是不必要的。除非您希望作用域是创建此组合框的任何对象,即。

第一点是最重要的。考虑使用CellEditing (或RowEditing)插件,我保证事情会顺利得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12072119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档