1

ビューに棒グラフがあり、棒列の項目を取得するリスナーがあります。コントローラーからそのリスナーを呼び出す必要があります。ここにコードがあります...

これは私の見解ではリスナーです..

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 () {

            }
        }
    });
},
4

4 に答える 4

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 に置き換える必要があります。

于 2013-05-05T18:02:30.933 に答える
0

itemmousedown イベントは「シリーズ」によって発生します。シリーズはコンポーネントではなく、レイアウト後にチャートによってのみ初期化されます。したがって、シリーズ オブジェクトへの参照を取得するには、チャートの afterlayout イベントを待つ必要があります。しかし残念ながら、チャートは 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/

于 2013-05-06T12:14:53.987 に答える
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']);
    }
于 2013-05-05T19:55:01.230 に答える