2016-04-18 8 views
0

Ich bin auf der Suche nach einem geeigneten Weg, um die Kommunikation zwischen meinen Ansichten und den jeweiligen Controllern zu implementieren.ExtJs 4.2 - Korrekte Art der Kommunikation zwischen View und Controller

  • Aufruf der Controller-Methode aus ihrer Sicht?
  • Verweis auf seine Ansicht im Controller?

So jetzt, ich Controller-Methode meiner Meinung nach wie dies nenne:

Ext.define('SomeApp.view.SomeTab', { 
extend: 'Ext.grid.Panel', 

alias: 'widget.someTab', 

initComponent: function() { 

    // Calling respective controller method to run the initializing sequence 
    PfalzkomApp.app.getController('someTabController').initializeSomeTab(); 
    this.callParent(); 
}, .... 

Und meine Ansicht für den Zugriff auf in meinem Controller, folgte ich this solution

Ext.define('SomeApp.controller.SomeTabController', { 
    extend: 'Ext.app.Controller', 

    views: [ 
     'SomeTab' 
    ], 

    refs: [{ 
     ref: 'SomeTab',//xtype 
    }],... 

Aber ich kann nur auf meine Ansicht zugreifen, nachdem sie gerendert wurde, was sinnvoll ist, aber ich habe mich gefragt, ob es eine bessere Lösung gibt.

Vielen Dank.

Antwort

0

Meiner Meinung nach (obwohl Sie ExtJS 4.2 verwenden), können Sie die Extjs Architektur der neuesten Versionen (5 +, 6 +) folgen, das heißt, dass jede Ansicht ihren bestimmten Controller (oder Viewcontroller) zugeordnet hat. Es ist besser, als einen Controller zu haben, der Ereignisse mehrerer Ansichten überwacht.

In Ihrem Fall könnte der Controller sein:

Ext.define('SomeApp.controller.SomeTabController', { 
    extend: 'Ext.app.Controller', 

....

init: function() { 
    this.control({ 
     'someTab': { 
      beforerender: this.loadView//use the event you want 
     } 
    }) 
}, 

... 
loadView: function(view){ 
    //your code 
} 

Die beforerender Methode können Sie die Ansicht vor der Ausgabe zuzugreifen. https://docs.sencha.com/extjs/4.2.0/#!/api/Ext.grid.Panel-event-beforerender

So

- Aufruf Controller-Methode aus seiner Sicht? Rufen Sie die Controller-Funktionen aus der Sicht kann mit der Eigenschaft listeners Donde und hören Sie das Ereignis, das Sie wollen.

- Beziehen Sie sich auf seine Ansicht im Controller? Wenn Sie in diesem Fall ein Ereignis einer Komponente registrieren, um eine Funktion auf Ihrem Controller aufzurufen, sollte normalerweise this Ihre Ansicht sein (someTab). Außerdem können Sie Ereignisse der Komponenten in Ihrer Sicht mit Selektoren abhören.

Hoffe das hilft dir!

+0

Vielen Dank für Ihre Zeit. Ich mache einige wichtige Sachen in initComponent http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.panel.Table-method-initComponent meiner Ansicht. Also können Sie mir sagen, wie ich meine Implementierung von initComponent in den Controller setzen kann? –

+0

Ich verstehe nicht, was Sie fragen. Was machst du in der initComponent? – qmateub

+0

In meinem gegebenen code of view können Sie sehen, dass innerhalb der initComponent-Methode ich eine Methode eines bestimmten Controllers aufrufen. Jetzt ist meine Frage: Wenn es eine andere Möglichkeit gibt, diese Views-Controller-Methode aufzurufen? Oder Wie kann ich diese initComponent-Definition von der Ansicht auf seinen Controller verschieben? –