ext.js中还有其他事件我应该使用吗

Is there another event in ext.js I should use?

本文关键字:我应该 事件 其他 js ext      更新时间:2023-09-26

我有一个包含文本和图像的列。我正在尝试将事件添加到图像中。id是动态分配的。当我尝试绑定事件时,Ext.get("id")返回一个null。我可以看到渲染器在viewready之后运行,因为屏幕正在刷新。我应该尝试不同的DOM事件吗?

  {
        text: 'My Thing',
        flex: 6,
        sortable: true,
        width: 40,
        dataIndex: 'myThing',
        renderer: function (val, metaData, record, rowIdx, colIdx, store, view) {
           {console.log(evname, arguments);});
                var returnStr = '<div>' + val + '</div>' + '<img id="image_' + record.data.myItem.id + '" src="/myThing/img/icon.png"/>';
                console.log(returnStr);
                return returnStr;
        }

console.log('Im here');
        for(var j=0; j<items.length; j++){
            console.log(j)
            var itemDesc = 'image_' + items[j].data.myItem.id;
            var itemDescStr = items[j].data.lineItem.myItem.id;
            console.log('itemDesc' + itemDesc)
            console.log(Ext.get(itemDesc));
            (function(itemDescStr) {
                Ext.get(itemDesc).on('click', function(e,t){
                    console.log('image '+ itemDescStr + ' clicked');
                });
            })(itemDescStr);
        }

"Ext.get(itemDesc)"正在返回null。

编辑:

我的临时解决方案是:

 {
        text: 'My Thing',
        flex: 6,
        sortable: true,
        width: 40,
        dataIndex: 'myThing'
        renderer: function (val, metaData, record, rowIdx, colIdx, store, view) {
            var returnStr = '<div><img id="image_' + record.data.myItem.id;
                returnStr = returnStr + '" src="/myApp/resources/app/img/myIcon.gif" ';
            returnStr = returnStr + 'onclick="Ext.foo(' + rowIdx + ')" />';
            returnStr = returnStr + ' ' + val + '</div>';
            return returnStr;
        }
    },

不要这样做,使用事件委派:

Ext.onReady(function() {
    var grid = new Ext.grid.Panel({
        width: 400,
        height: 400,
        renderTo: document.body,
        store: {
            fields: ['name'],
            data: [{
                name: 'Foo'
            }, {
                name: 'Bar'
            }]
        },
        columns: [{
            dataIndex: 'name',
            renderer: function(v) {
                return Ext.String.format('<div class="x">{0}</div><div class="y">{0}</div><div class="z">{0}</div>', v);
            }
        }],
        listeners: {
            cellclick: function(view, el, cellIdx, record, row, rowIdx, e) {
                if (e.getTarget('.x')) {
                    console.log('x');
                } else if (e.getTarget('.y')) {
                    console.log('y');
                } else {
                    console.log('neither');
                }
            }
        }
    });
});