2012-04-24 4 views
10

Come si può assegnare un evento click a un intervallo arbitrario (ad esempio < span id = "foo"> pippo </span>) in un'app ST2? Ho un esempio banale che illustra l'idea di cosa mi piacerebbe fare. Nell'esempio, scrivo le lettere A, B, C e vorrei dire all'utente quale lettera hanno cliccato. Ecco un'immagine:Aggiunta di un evento click a un elemento?

enter image description here

Il codice:

 
Ext.application({ 

    launch: function() { 
     var view = Ext.create('Ext.Container', { 

      layout: { 
       type: 'vbox' 
      }, 
      items: [ 
       { 
        html: '<span id="let_a">A</span> <span id="let_b">B</span> <span style="float:right" id="let_c">C</span>', 
        style: 'background-color: #c9c9c9;font-size: 48px;', 
        flex: 1 
       } 
      ] 
     }); 
     Ext.Viewport.add(view); 
    } 
}); 
+1

Grazie, ma come farlo se si dispone di più componenti personalizzati con ID univoci? Ho miniature con id unici dal mio negozio che sto cercando di passare a un popup. Sicuramente non vorrei avere più listener per ogni ID miniatura? – Digeridoopoo

risposta

22

È possibile aggiungere un ascoltatore ad un elemento specifico utilizzando la delega. In realtà è abbastanza semplicemente da usare.

Ext.Viewport.add({ 
    html: 'test <span class="one">one</span> hmmm <span class="two">two</span>', 
    listeners: [ 
     { 
      element: 'element', 
      delegate: 'span.one', 
      event: 'tap', 
      fn: function() { 
       console.log('One!'); 
      } 
     }, 
     { 
      element: 'element', 
      delegate: 'span.two', 
      event: 'tap', 
      fn: function() { 
       console.log('Two!'); 
      } 
     } 
    ] 
}); 

Le parti principali sono element e delegate.

  • element avrà il valore di element in quasi tutti i casi, a meno che non si sta lavorando con componenti personalizzati con modelli personalizzati.
  • delegate è un semplice selettore CSS. Quindi potrebbe essere qualsiasi cosa, da span al span .test.second

Idealmente, come detto Thiem, si dovrebbe approfittare di componenti, per quanto possibile. Ti daranno molta più flessibilità. Ma so che ci sono sicuramente alcuni casi in cui è necessario farlo. Non ci saranno implicazioni sul rendimento; infatti, sarà più veloce rispetto all'utilizzo dei componenti. Tuttavia, dovresti mai implementare gli ascoltatori nel modo in cui ha suggerito. Non sarà performante ed estremamente sporco (come ha accennato).

+0

Posso gestire più nello stesso html: come nel mio esempio? –

+0

Sì. Ho aggiornato la mia risposta per includere più ascoltatori. – rdougan

+0

Fantastico - grazie per questa risposta. I documenti di Sencha potrebbero usare più esempi di utilizzo delle capacità di Ext/Touch al di fuori del modello standard presentato nei loro componenti e controlli. – phatskat