Javascript ExtJS4,事件处理,作用域,自定义组件
我有以下问题。我有Javascript ExtJS4,事件处理,作用域,自定义组件,javascript,extjs,extjs4,extjs-mvc,Javascript,Extjs,Extjs4,Extjs Mvc,我有以下问题。我有tbar的网格。在tbar内部,我有Ext.form.field.Trigger的编号 当用户单击触发器按钮时,我希望使用网格提供的功能过滤存储。我想在定义的类中定义触发器click的功能,这样我就可以在不同的网格中重用该组件 因此,简而言之,我想找到放置单击组件的面板并调用面板函数,或者将面板的引用传递给triggerclick,或者触发一个带有一些参数的事件,这些参数将根据按钮单击的位置进行计算,或者可能有更好的方法来实现这一点 代码(FilterField->触发器扩展)
tbar
的网格。在tbar
内部,我有Ext.form.field.Trigger的编号
当用户单击触发器按钮时,我希望使用网格提供的功能过滤存储。我想在定义的类中定义触发器click
的功能,这样我就可以在不同的网格中重用该组件
因此,简而言之,我想找到放置单击组件的面板并调用面板函数,或者将面板的引用传递给triggerclick
,或者触发一个带有一些参数的事件,这些参数将根据按钮单击的位置进行计算,或者可能有更好的方法来实现这一点
代码(FilterField->触发器扩展):
专家组代码:
控制器部分代码:
控制器可以听任何东西。只需要具体说明要做什么。但我会在面板级别触发事件-将其添加到触发器处理程序中:
this.up('panel').fireEvent('triggerclicked');
我不确定你的问题中有什么不起作用。您发布了很多代码,但没有告诉我们问题的确切位置。但是你的任务对我在项目中所做的工作似乎很熟悉。有关如何重用组件和控制器的说明,请参阅此问题。我有一个带有filterfield的面板。此面板还具有功能过滤器列表。如何从filterfield轻松调用filterList。Filterfield是Trigger的扩展,所以调用应该来自OnTiggerClick(我想把调用放在类定义中-第一个代码示例)。。您可以向上('panel')获取对组件所在面板的引用,并从中调用方法。但我不建议这样做。相反,我会订阅panel类中的filterfield事件,或者生成事件并在controller中订阅它。如何启动(“panel”)-OnTiggerClick接收EventObject和target。如何从中获取组件?所以我可以调用函数。我会尝试其他方法,你可以听任何东西。只需要具体说明要做什么。但我会在面板级别触发事件-将其添加到触发器处理程序中:this.up('panel').fireEvent('triggerclicked')代码>
Ext.define('GSIP.view.plans.PlanReqList', {
extend: 'Ext.grid.Panel',
alias: 'widget.gsip_devplan_list',
id: 'gsip_plan_list',
title: i18n.getMsg('gsip.view.PlanReqList.title'),
layout: 'fit',
initComponent: function() {
this.store = 'DevPlan';
this.tbar = [{
xtype: 'filterfield',
id: 'filter_login',
triggerCls: 'icon-user',
//scope:this - how to pass scope to panel without defining onTriggerClick here
// onTriggerClick: function() {
// this.fireEvent('filterclick'); //working event is fired but controller cant see it
// this.filterList; //this is working but i dont want to put this code in every filterfield
// },
// listeners : {
// filterclick: function(btn, e, eOpts) { //this is working
// }
// },
}];
this.columns = [{
id: 'id',
header: "Id",
dataIndex: "id",
width: 50,
sortable: true,
filterable: true
}, {
header: "Name",
dataIndex: "name",
width: 150,
sortable: true,
filterable: true
}, {
header: "Author",
dataIndex: "author",
sortable: true,
renderer: this.renderLogin,
filterable: true
}];
this.callParent(arguments);
},
filterList: function() {
this.store.clearFilter();
this.store.filter({
property: 'id',
value: this.down("#filter_id").getValue()
}, {
property: 'name',
value: this.down("#filter_name").getValue()
});
},
renderLogin: function(value, metadata, record) {
return value.login;
}
});
init: function() {
this.control({
'attachments': {
filesaved: this.scanSaved,
}
}, {
'scan': {
filesaved: this.attachmentSaved
}
}, {
'#filter_login': {
filterclick: this.filterStore //this is not listened
}
});
},
filterStore: function() {
console.log('filtering store');
this.getPlanListInstance().filter();
},
this.up('panel').fireEvent('triggerclicked');