How to get plugin from component using component query on Extjs 4.1?

半世苍凉 提交于 2019-12-25 05:26:07

问题


I want to add event listener to plugin on Controller.like http://docs.sencha.com/ext-js/4-1/#!/api/Ext.app.Controller It seems different to get plugin using component query than normal component. Is it possible to get plugin from component using component query?

Here is my component

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

Can i get treeviewdragdrop plugin using component query like

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 ....

回答1:


You can't because a plugin is not a component, thus no selector will find it.

Also, the drop event is fired by the treeview, so the treeview is really what you want to hook to.

This will work:

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



回答2:


There is no straightforward approach to do that. If I were in your shoes I would, probably, made tree to fire needed event when the plugin fires its event:

// 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:

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


来源:https://stackoverflow.com/questions/10909168/how-to-get-plugin-from-component-using-component-query-on-extjs-4-1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!