我正在尝试响应控制器内的视图触发事件。事件会触发,但永远不会调用控制器操作。
查看:
Ext.define("MyApp.view.Dashboard", {
extend: 'Ext.Container',
xtype: 'my_dashboard',
config: {
items: [
{
xtype: 'dataview',
listeners: {
itemtap: function(sender, index, elem, record) {
// fires with param, e.g. 'inbox'
this.fireEvent(record.get('name'));
}
}
}
...
控制器:
Ext.define('MyApp.controller.Dashboard', {
extend: 'Ext.app.Controller',
config: {
control: {
'my_dashboard': {
'inbox': 'showInbox',
...
}
}
},
showInbox: function () {
/* never gets called */
},
...
我做错了什么?
更新:
我找到了一个解决方案,但感觉非常黑客。我在数据视图和 bubbleEvents
视图中添加了my_dashboard
配置,并且事件开始向控制器发送。
由于仪表板可以有可变数量的项目,我不知道我需要冒泡哪些事件。当然,我可能会冒出所有可能的仪表板事件,但这看起来像是一块巨大的垃圾。
视图是否应该触发应用程序事件,例如MyApp.app.fireEvent()
?
答案 0 :(得分:0)
我会在数据视图上添加itemId。
itemId: 'my_dashboard_dataview'
然后在你的控制器......
control: {
'#my_dashboard_dataview': {
'itemtap': 'showInbox',
...
}
}
答案 1 :(得分:0)
<强>更新强>
以下是一些可以帮助您入门的代码:
控制器:
Ext.define('MyApp.controller.Dashboard', {
extend: 'Ext.app.Controller',
config: {
control: {
'my_dashboard': {
painted: 'onDashboardPainted',
inbox: 'showInbox'
}
}
},
onDashboardPainted: function(dashboard, eOpts) {
dashboard.down('dataview').on('itemtap', function(sender, index, elem, record){
dashboard.fireEvent(record.get('name'));
//check the console to make sure you the value is: inbox
console.log(record.get('name'));
});
},
showInbox: function () {
console.log('showInbox init');
},
这肯定是一个范围问题......在你的控制器中为my_dashboard添加一个绘制的函数......第一个函数变量将是my_dashboard组件本身:
painted: function(dashboard,...
现在在绘制的函数中动态添加侦听器:
dashboard.down('dataview').on(
......其余的听众代码......
现在在听众内部做dashboard.fireEvent(....);
很抱歉我手机上的格式化,如果你无法上班,我明天会发布代码