2011-11-27 2 views

risposta

1

Prova di override AfterRender metodo a Carousel, (ho tolto eventi di trascinamento sul metodo Childs)

afterRender : function() { 
     Ext.Carousel.superclass.afterRender.call(this); 
     this.mon(this.body, { 
     direction : this.direction, 
     scope : this 
     }); 
     this.el.addCls(this.baseCls + "-" + this.direction) 
    } 

codice intero;

this.car = new Ext.Carousel({ 
       ui  : 'light', 
       items: [ 
       { 
         html: '<p>Carousels can be vertical and given a ui of "light" or "dark".</p>', 
         cls : 'card card1' 
        }, 
        { 
         html: 'Card #2', 
         cls : 'card card2' 
        }, 
        { 
         html: 'Card #3', 
         cls : 'card card3' 
        }], 
         afterRender : function() { 
          Ext.Carousel.superclass.afterRender.call(this); 
          this.mon(this.body, { 
           direction : this.direction, 
           scope : this 
          }); 
          this.el.addCls(this.baseCls + "-" + this.direction) 
         } 
     }); 
+0

Grazie, funziona. Ma non sono sicuro di come funziona :) Puoi spiegarlo? – Egor4eg

+1

Ovviamente. L'idea è semplice Dobbiamo disabilitare il trascinamento e in tal caso è possibile rimuovere il listener di trascinamento. Trascina il listener aggiunto nel metodo afterRender in sencha-touch.js. Sostituiamo il metodo afterRender in modo che il metodo afterRender di sencha-touch non venga eseguito, il nostro nuovo metodo viene eseguito e il nostro metodo non aggiungerà il listener di trascinamento. Spero che questa descrizione sia chiara. :) –

+0

Grazie, ho avuto l'idea. – Egor4eg

10

Basta lanciare questo fuori per le persone Sencha Touch 2.0. La soluzione sopra descritta non funziona con Sencha Touch 2.0, ma c'è un lavoro piuttosto semplice.

Ext.define('Ext.LockableCarousel', { 
    extend: 'Ext.Carousel', 
    id: 'WelcomeCarousel', 
    initialize: function() { 
     this.onDragOrig = this.onDrag; 
     this.onDrag = function (e) { if(!this.locked){this.onDragOrig(e);} } 
    }, 
    locked: false, 
    lock: function() { this.locked = true; }, 
    unlock: function() { this.locked = false; } 
}); 

Questo funzionerà esattamente come un carosello, tranne che ora è possibile chiamare .lock e .unlock su di esso. Quindi potresti fare qualcosa del tipo:

Ext.Viewport.add(Ext.create('Ext.LockableCarousel', { 
    id: 'LockableCarousel', 
    fullscreen: true, 
    hidden: false, 
    items: [ 
     { 
      html : 'Item 1', 
      style: 'background-color: #5E99CC' 
     }, 
     { 
      html : '<a href="#" onclick="Ext.getCmp(\'LockableCarousel\').lock();">Lock</a><br /><a href="#" onclick="Ext.getCmp(\'LockableCarousel\').unlock();">Unlock</a>', 
      style: 'background-color: #759E60' 
     } 
    ] 
})); 
+0

Grazie per il codice di esempio. Disabilita anche l'indicatore, quindi è tutto ciò di cui avevo bisogno per bloccare temporaneamente la giostra. –

+0

Assolutamente semplice. Ho spostato la var 'bloccata' nell'oggetto config in modo da poter impostare lo stato bloccato predefinito quando si aggiunge il carosello personalizzato. Questo cambia l'accesso alla var bloccata a: this.getLocked(); – daxiang28

+0

Soluzione molto bella, funziona alla grande. Grazie! – Phil