1

問題があり、デバッグの進め方がわからない。私とほぼ同じように見える質問を見つけましたが、解決策は機能しません:ExtJs 4の(MVC)コントローラーからツリーノードのクリックをキャッチする方法は?

その質問と私の質問の唯一の違いは、ツリーが個別に作成された場所を 使用してxtype、アイテムオブジェクトとしてレイアウト内に直接作成されることです。treepanel

これが私のコントローラーです:

Ext.define("IOL.controller.app.AppLayout", {
    extend: 'Ext.app.Controller',
    init: function() {
        this.control({
            'app toolbar > button[itemId=filter]' : {
                click: this.onFilter
            },
            'menuTree': {
                itemclick: this.onFilter
            }
        });
    },

    onFilter: function(btn) {
        alert('test');
        Ext.create('IOL.view.app.Home').show();
    }

});

これが私の見解からの関連項目です:

{
        xtype: 'treepanel',
        title: 'Navigation',
        split: true,
        collapsible: true,
        margins: '5 0 5 5',
        region: 'west',
        width: 170,
        id: 'menuTree',
        alias: 'widget.menuTree',
        store: Ext.create('IOL.store.app.AppNav'),
        useArrows: true,
        rootVisible: false
        /*listeners : {
            itemdblclick : function(view,rec,item,index,eventObj) {

                console.log(view);
                console.log(rec);
                console.log(item);
                console.log(index);
                console.log(eventObj);
                if(rec.get('leaf') == true){
                    Ext.ComponentQuery.query('tabpanel')[0].add({
                        xtype: 'panel',
                        title: rec.get('text'),
                        itemId: rec.get('id'),
                        //url: 'server/HomeTab/read.php',
                        html : 'test content name: ' + rec.get('id'),
                        closable : true
                    });
                }

            }
        }*/
    }

ボタンのコントロールは機能しますapp toolbar > button[itemId=filter]が、「menuTree」に同じアクションを割り当てることは機能しません。ブラウザコンソールはで有効なオブジェクトを返すExt.getCmp('menuTree')ので、コントローラがツリーに作用していないように見える理由がわかりません。

.on('click')ツリーはストアから読み込まれているため、これはjQueryではなく使用する必要があるシナリオと似ているのではないかと思い.click()ます...コントローラーがツリーを表示していないように(ただし、同じビューにボタンが表示されているように) ?)。私は意図的にハンドラーをツリー上で直接コメントアウトしました(これは機能します)。

役立つ場合は、すべてのファイルを提供できます。

4

1 に答える 1

4

Ext.getCmp()はidでコンポーネントを返しますが、コントローラーはExt.ComponentQuery.query()構文を使用してコンポーネントを検索します。非常に効果的に、存在しないxtypemenuTreeを使用してコンポーネントを制御しようとしています。セレクターとして「#menuTree」または「treepanel」のいずれかを使用する必要があります。

于 2012-08-24T19:24:15.363 に答える