我的视图中有一个条形图,我有一个监听器正在检索条形码项,现在我必须从控制器调用该监听器这里是我的代码......
我认为这是听众..
listeners: {
itemmousedown: function (obj) {
alert(obj.storeItem.data['source'] + ' &' + obj.storeItem.data['count']);
}
},
我必须从我的控制器调用这个监听器。这是我的代码..
init: function () {
this.control({
'barColumnChart': { //this is the id of the bar chart in my View
click: function () {
}
}
});
},
答案 0 :(得分:0)
您是否尝试过使用'#barColumnChart'作为选择器?我有点生疏,但我认为这是你在控制器内部获取元素的方式。
答案 1 :(得分:0)
您没有“调用”侦听器,在触发事件时调用侦听器。 因此,您应该在控制器中设置itemmousedown侦听器,并将其从视图中删除。 我不知道哪个视图有itemmousedown事件,但如果它确实是条形图,它应该如下所示:
this.control({
'#barColumnChart': { //this is the id of the bar chart in my View
itemmousedown: function(obj) {
alert(obj.storeItem.data['source'] + ' &' + obj.storeItem.data['count']);
}
}
});
但是,如果事件是另一个视图,则应将'#barColumnChart'替换为正确视图的id(或该视图的另一个选择器)
答案 2 :(得分:0)
如果在控制器中创建侦听器,则无需在视图中创建侦听器 在控制器中,您可以创建对视图的引用,如下所示:
refs: [{
ref : 'barColumnChart',
selector: 'your_view'
}
}]
然后创建将在项目鼠标按下时调用的函数:
me.control({
'barColumnChart#your_chart': {
click: me.your_function
}
}),
your_function(button, e, options) {
alert(obj.storeItem.data['source'] + ' &' + obj.storeItem.data['count']);
}
答案 3 :(得分:0)
“系列”触发了itemmousedown事件,系列不是组件,仅在布局后由图表初始化。因此,为了获得对系列对象的引用,我们需要等待图表的afterlayout事件。但不幸的是,该图表并未触发后续事件...... 因此,首先覆盖图表的afterComponentLayout方法,以便触发事件:
Ext.define('MyNewChart',{
extend: 'Ext.chart.Chart',
afterComponentLayout: function(width, height, oldWidth, oldHeight) {
this.callParent(arguments);
this.fireEvent('afterlayout', this);
}
});
现在,使用我们的新图表类来创建图表:
Ext.create('MyNewChart', {
id: 'myChart',
...
});
现在我们可以创建一个实际上在itemmousedown事件上创建一个监听器的控制器:
Ext.define('Gamma.controller.ControlFile', {
extend : 'Ext.app.Controller',
initializedEvents: false,
init: function() {
this.control({
'#myChart': {
afterlayout: this.afterChartLayout
}
});
},
afterChartLayout: function(){
if(this.initializedEvents==true) return;
this.initializedEvents=true;
Ext.getCmp('myChart').series.items[0].on('itemmousedown',function(obj){
console.log(obj);
});
}
});
这是一个工作小提琴:http://jsfiddle.net/qjfBC/