2012-03-24 12 views
4

Ich habe eine Schaltfläche in einem Sencha Touch 2-Projekt. Die Schaltfläche wird mit der Ansicht zerstört, nachdem sie gedrückt wurde, und wird wiederhergestellt, nachdem eine andere Schaltfläche gedrückt wurde.Sencha Touch 2-Taste locker Zuhörer

Aber der Knopf bekommt den Hörer nicht wieder.

der Listener ist in der Steuerung der Ansicht eingebaut.

Ext.application({ 
name: 'App', 
controllers: ['Main','Home'], 
views: ['Main','Home'], 
launch: function() {Ext.Viewport.add({xtype:'mainview'});} 
}); 

der Controller

Ext.define('App.controller.Home', {extend: 'Ext.app.Controller', 
config: { 
    refs: {homeView: '#homeview',backBtn: '#btn_test1'}, 
    control: { 
     backBtn: { 
      tap: function(backBtn){ 
       console.log('[Controller][Home] btn monatsrate - - tap'); 
       Ext.Viewport.add({xtype: 'mainview'}); 
       Ext.Viewport.setActiveItem(1); 
      } 
     }, 
     homeView: { 
      deactivate: function (homeView){ 
       console.log('[Controller][Home] autodestroy homeview'); 
       //homeView.destroy(); 
       Ext.Viewport.remove(homeView); 
      } 
     } 
    } 

}, 
}); 

Und der Blick

Ext.define("App.view.Main", { 
extend:"Ext.Container", 
xtype:"mainview", 
config:{ 
    id:'mainview', 
    items:[ 
     { 
      xtype:'button', 
      id:'btn_test2', 
      text: 'test2' 
     } 
    ] 
}, 

});

Irgendeine Idee, wie man den Knopf erlaubt, den Zuhörer zurück zu bekommen?

Antwort

3

Dies ist, weil das "ref" in Ihrem Controller die ID der Schaltfläche verwendet, um die Ref zu erstellen. Verwenden Sie stattdessen eine andere Auswahl für Ihre Schaltfläche. Zum Beispiel könnten Sie Ihrem Button eine "name" -Eigenschaft geben und ihm den Wert "testbutton" geben. Dann würde dein ref wie

sein
refs: {homeView: '#homeview',backBtn: 'button[name=testbutton]'}, 

ich mit diesem gleichen Problem für Schaltflächen und Listenelemente zu kämpfen, die erstellt wurden/zerstört viele Male während der Strömung der Anwendung. Seitdem habe ich ein paar Mal gelesen, dass das Sencha Touch-Team generell empfiehlt, die ID nicht als Selektor zu verwenden, es sei denn, Sie haben einen bestimmten Grund dafür. Die obige "Name" -Methode funktioniert sehr gut für mich. Sie könnten auch viele andere Css-Stil Selektoren verwenden (Sie müssten das separat lesen).

Wie in einem früheren Kommentar erwähnt, würde ich einige Antworten akzeptieren, um die Wahrscheinlichkeit zu erhöhen, in Zukunft eine Antwort auf Ihre Fragen zu erhalten. Ich antworte nur auf diesen, weil ich in dieser Angelegenheit meinen Kopf 4 Stunden lang gegen die Wand geschlagen habe.

0

Ich glaube, Ihr Problem ist genau der ID-Parameter. Wenn Sie jemals eine ID hinzufügen, sollten Sie sicherstellen, dass sie eindeutig ist. Wenn Sie also einer Konfigurationsdatei Ihrer benutzerdefinierten Ansicht eine ID hinzufügen, können Sie nicht mehr als eine Instanz davon erstellen. Ich bin vielleicht nicht 100% ig richtig (vielleicht in einem Container, aber ich glaube, dass es sowieso Probleme verursachen wird), aber warum sollten Sie eine ID so sehr wollen? Außerdem können Sie einfach Ihre Ansicht von xtype Referenz:

refs: {homeView: 'homeview',backBtn: 'btn_test1'}, 

Grüßen,

+0

Obwohl ich denke, es ist das ID-Problem! Dieser Code, den Sie Ext.Viewport.add ausführen ({xtype: 'mainview'}); erstellt mehr und mehr Ansichten mit den gleichen IDs. Ich glaube, der Hundeführer arbeitet immer an der ersten. – igrek

1

Sencha der Beispiele empfehlen die Verwendung von Aktion Config auf Tasten, wie 'Abbrechen', 'GoHome', 'erstelleBeitrag', etc .. die irgendwie macht Sinn.
Alle refs sind dann in der Form von: myContainer button [action = myAction]