fyi, das ist meine erste Ext JS-Projekt und mit ExtJS6 Ich erstellte eine Haupt-Rahmen-Layout und jede Ansicht hat einen eigenen Controller.ext js Call-Methode in der Steuerung von einem anderen Controller
Vom West View Controller, wie rufe ich eine Methode in der Center-Controller.
Sollte ich weitere Informationen zur Verfügung stellen?
Das Konzept ist, an der Westgrenze habe ich eine Combobox. Wenn der Benutzer eine Combobox auswählt, lädt er einige Geschäfte mit Daten. Mit diesen Speichern möchte ich einige benutzerdefinierte Funktionen aufrufen, die ich in der CENTER-Ansichtssteuerung erstellt habe. Der Grund dafür, dass sie in der CENTER-Ansichtssteuerung erstellt wurden, liegt darin, dass sie sich auf die Raster auswirken, die sich in der MITTEANSICHT befinden.
Hier ist meine main.js
Ext.define('ExtApplication1.view.main.Main', {
extend: 'Ext.container.Container',
xtype: 'app-main',
controller: 'main',
viewModel: {
type: 'main'
},
plugins: 'viewport',
requires: [
'ExtApplication1.view.main.Header',
'ExtApplication1.view.main.Footer',
'ExtApplication1.view.main.Panel',
'ExtApplication1.view.main.MainController',
'ExtApplication1.view.main.MainModel',
'ExtApplication1.view.mainmenulist.mainmenulist',
'ExtApplication1.view.clientdetails.clientdetails'
],
layout: {
type: 'border'
},
items: [{
region: 'center',
xtype: 'clientdetails', //should be maintable
title: 'Main Details Panel',
flex: 1
}, {
xtype: 'appheader',
region: 'north'
}, {
xtype: 'appfooter',
region: 'south'
}, {
region: 'west',
split: true,
collapsible: true,
title: 'Main Menu',
//flex: 2,
xtype: 'mainmenulist' // 'mainmenuv4view' 'mainmenuv3view'
}]
});
Hier ist meine WEST-Region-Controller, ich möchte Ereignis auf Combobox-Auswahl auslösen, nachdem zwei verschiedene Geschäfte geladen sind.
Ext.define('ExtApplication1.view.mainmenulist.mainmenulistController', {
extend: 'Ext.app.ViewController',
alias: 'controller.mainmenulist-mainmenulist',
onComboboxSelect: function (combo, record, eOpts) {
//load position store
//load market store
//calculate
var selectedCID = record.get('ClientID');
var targetGrid = Ext.getCmp('positionsGridID');
var targetStore = targetGrid.getStore();
//load positions store
targetStore.load({
params: {
user: 'xxx',
pw: 'xxx',
cid: selectedCID
},
//load market data
callback: function (records, operation, success) {
var targetGrid2 = Ext.getCmp('marketsGridID');
var targetStore2 = targetGrid2.getStore();
targetStore2.load({
params: {
user: 'stephen',
pw: 'forero',
cid: selectedCID
},
callback: function (records, operation, success) {
//Ext.Msg.alert('Status', 'Changes saved successfully.');
this.fireEvent('doSomething', 'arg1', 'arg2');
//ExtApplication1.app.getController('view.clientdetails.clientdetailsController').onClickCalculate();
}
});
}
});
}
});
hier ist mein Controller für CENTER Region
Ext.define('ExtApplication1.view.clientdetails.clientdetailsController', {
extend: 'Ext.app.ViewController',
alias: 'controller.clientdetails-clientdetails',
init: function() {
this.listen({
controller: {
'*': { // This selector matches any originating Controller
doSomething: 'doSomething'
}
},
})
},
doSomething: function (param1, param2) {
Ext.Msg.alert('Status', 'Changes saved successfully.');
//alert("Param1: " + param1 + " Param2: " + param2);
},
das Controller-Ereignis klingt wie eine bessere Option. Ich habe es versucht und die Veranstaltung wird nicht gestartet oder empfangen. Ich habe den obigen Code hinzugefügt. Kannst du sehen, was ich falsch mache? – solarissf
Ihre Lösung hat für mich funktioniert. Vielen Dank! – solarissf