1

我编写了自己的My.grid继承自事件Ext.grid.Panel并设置了监听itemdblclick器。

此事件的处理函数view作为第一个参数获取,并this作为范围。

我不明白为什么我在viewand中得到不同的值this

  • this是一个实例My.grid

  • viewExt.grid.Panel(但我期望My.grid)的一个实例

可能是我做错了什么?还是 ExtJS 的错误/功能?

如何在此处编写继承的小部件view以引用继承的对象?

这是一个简单的例子:

<!DOCTYPE html>
<html>
<head>
    <title>ExtJS Test page</title>
    <link rel="stylesheet" href="http://cdn.sencha.io/ext-4.1.1-gpl/resources/css/ext-all-gray.css">
    <script type="text/javascript" charset="utf-8" src="http://cdn.sencha.io/ext-4.1.1-gpl/ext-all.js"></script>
    <script type="text/javascript">
        Ext.create('Ext.data.Store', {
            storeId: 'simpsonsStore',
            fields: ['name', 'email', 'change'],
            data: {
                'items': [
                    { 'name': 'Lisa', 'email': 'lisa@simpsons.com', 'change': 100 },
                    { 'name': 'Bart', 'email': 'bart@simpsons.com', 'change': -20 },
                    { 'name': 'Homer', 'email': 'home@simpsons.com', 'change': 23 },
                    { 'name': 'Marge', 'email': 'marge@simpsons.com', 'change': -11 }
                ]
            },
            proxy: { type: 'memory', reader: { type: 'json', root: 'items' } }
        });

        Ext.define('MY.grid', {
            extend: 'Ext.grid.Panel',
            alias: 'widget.simpsonsgrid',
            title: 'Simpsons',
            store: Ext.data.StoreManager.lookup('simpsonsStore'),
            columns: [
                { header: 'Name', dataIndex: 'name' },
                { header: 'Email', dataIndex: 'email' },
                { header: 'Change', dataIndex: 'change' }
            ],
            initComponent: function () {
                this.callParent(arguments);
                this.on('itemdblclick', this.test, this);
            },
            test: function (view, record) {
                console.log(this); // instance of My.grid
                console.log(view); // instance of Ext.grid.Panel
            }
        });

        Ext.onReady(function () {
            Ext.widget('simpsonsgrid', {
                renderTo: Ext.getBody()
            });
        });
    </script>
</head> <body></body> </html>
4

1 回答 1

1

查看 API ( http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.Panel )。您可以在那里看到此特定事件具有以下签名:

itemdblclick(
    Ext.view.View this,
    Ext.data.Model record,
    HTMLElement item,
    Number index,
    Ext.EventObject e,
    Object eOpts
)

So actually you should get an istance of Ext.grid.View in view argument. You can get instance of MY.grid by accessing view.ownerCt.

Example: http://jsfiddle.net/TLEFH/

于 2012-09-16T11:17:33.397 回答