2012-06-06 65 views
0

我想添加事件監聽器插件Controller.like http://docs.sencha.com/ext-js/4-1/#!/api/Ext.app.Controller看起來不同於插件使用組件查詢比正常組件。 是否有可能使用組件查詢從組件中獲取插件?如何使用Extjs 4.1上的組件查詢從組件中獲取插件?

這裏是我的組件使用組件查詢像

Ext.define('App.controller.FileManagement', { 
    extend:'Ext.app.Controller', 
    stores:['Folder'], 
    views:['file.List','file.FileManagement'], 
    refs:[ 
     { ref:'fileList', selector:'filelist' } 
    ], 
    init:function() { 
     this.control({ 
      'filelist > treeviewdragdrop':{drop:this.drop} // <-- here is selector 
     }); 
    }, 
    // etc .... 

回答

4

你不能因爲一個插件是不是組件,因此沒有選擇器會找到它。

此外,放置事件是由樹視圖觸發的,所以樹視圖真的是你想要鉤住的東西。

這將工作:

init:function() { 
    this.control({ 
     'filelist > treeview': {drop:this.drop} 
    }); 
}, 
+0

非常感謝你的幫助= D – XenoN

2

有沒有簡單的方法來做到這一點

Ext.define('App.view.file.List',{ 
    rootVisible: false, 
    extend:'Ext.tree.Panel', 
    alias:'widget.filelist', 
    viewConfig: { 
     plugins: { 
      ptype: 'treeviewdragdrop', 
      allowParentInsert:true 
     } 
    }, 
    //etc ... 

我能得到treeviewdragdrop插件。如果我是你的話我想,也許,做樹時,插件觸發的觸發事件,需要事件:

// view 
Ext.define('App.view.file.List',{ 
    // ... 
    viewConfig: { 
     plugins: { 
      ptype: 'treeviewdragdrop', 
      pluginId: 'treeviewdragdrop', // <-- id is needed for plugin retrieval 
      allowParentInsert:true 
     } 
    }, 
    initComponent: funcion() { 
     var me = this; 
     me.addEvents('viewdrop'); 
     me.callParent(arguments); 
     me.getPlugin('treeviewdragdrop').on('drop', function(node, data, overModel, dropPosition, eOpts) { 
     // when plugin fires "drop" event the tree fires its own "viewdrop" event 
     // which may be handled via ComponentQuery 
     me.fireEvent('viewdrop', node, data, overModel, dropPosition, eOpts); 
     }); 
    }, 
    // ... 

控制器:

// controller 
Ext.define('App.controller.FileManagement', { 
    // ... 
    init:function() { 
     this.control({ 
      'filelist':{viewdrop:this.drop} // <-- here is selector 
     }); 
    }, 
    // etc .... 
+0

我不認爲你需要整個InitComponent位。該視圖中插入的插件被鏡像。因此,控制器init只是選擇組件,然後getView(),然後.on('drop'...)。 – Izhaki

+0

@Izhaki,如果它被鏡像,那麼你是對的。 –

+0

'addEvents'已棄用。只需使用'me.fireEvent('viewdrop',node,data,overModel,dropPosition,eOpts);' –