1

独自のMy.grid継承元を作成し、イベントExt.grid.Panelにリスナーを設定しitemdblclickました。

このイベントのハンドラー関数は、第一引数として getし、スコープとしてview持ちます。this

viewと で異なる値を取得する理由がわかりませんthis?

  • thisのインスタンスですMy.grid

  • viewのインスタンスですExt.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
)

したがって、実際にはExt.grid.Viewinview引数のインスタンスを取得する必要があります。MY.gridにアクセスすることで のインスタンスを取得できますview.ownerCt

例: http://jsfiddle.net/TLEFH/

于 2012-09-16T11:17:33.397 に答える