2011-11-27 12 views
5

में खींचने को अक्षम करें क्या कैरोसेल पैनलों के बीच स्वैप करने के लिए ड्रैगिंग के उपयोग को अक्षम करना संभव है? मैं सिर्फ संकेतक का उपयोग करना चाहता हूं।कैरोसेल

उत्तर

1

कोशिश ओवरराइड Carousel में विधि afterRender;

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

पूरे कोड (मैं बच्चे की पद्धति पर खींचें घटनाओं हटाया);

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

धन्यवाद, यह काम करता है। लेकिन मुझे यकीन नहीं है कि यह कैसे करता है :) क्या आप इसे समझा सकते हैं? – Egor4eg

+1

बेशक। विचार सरल है। हमें ड्रैगिंग को अक्षम करना होगा और उस स्थिति में ड्रैग श्रोता को हटाने के साथ यह संभव है। Sencha-touch.js में रेंडर विधि के बाद जोड़े गए श्रोता को खींचें। हम बाद की विधि को ओवरराइड करते हैं, इसलिए सेन्चा-टच के बाद रेंडर विधि नहीं चलती है, हमारी नई विधि चलती है और हमारी विधि ड्रैग श्रोता नहीं जोड़ती है। मुझे आशा है कि यह विवरण स्पष्ट है। :) –

+0

धन्यवाद, मुझे विचार मिला। – Egor4eg

10

बस इसे सेन्चा टच 2.0 लोगों के लिए बाहर फेंक रहा है। उपरोक्त समाधान सेन्चा टच 2.0 के लिए काम नहीं करता है, लेकिन आसपास एक बहुत ही आसान काम है।

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; } 
}); 

यह वास्तव में एक हिंडोला की तरह कार्य करेगा, को छोड़कर अब आप .lock फोन और उस पर .unlock कर सकते हैं। तो आप कुछ ऐसा कर सकते हैं:

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

कोड नमूना के लिए धन्यवाद। यह संकेतक को भी अक्षम करता है, इसलिए वास्तव में यह सब कुछ है जिसे मुझे अस्थायी रूप से कैरोसेल को लॉक करने की आवश्यकता होती है। –

+0

स्पष्ट रूप से सरल। मैंने कॉन्फ़िगरेशन ऑब्जेक्ट में 'लॉक' var को स्थानांतरित कर दिया ताकि कस्टम कैरोसेल जोड़ने के दौरान मैं डिफ़ॉल्ट लॉक स्थिति सेट कर सकूं। यह लॉक var को एक्सेस करने में परिवर्तन करता है: this.getLocked(); – daxiang28

+0

बहुत अच्छा समाधान, महान काम करता है। धन्यवाद! – Phil