2011-03-21 29 views
33

मेरे पास एक बैकबोन व्यू है जो स्लाइड शो को लागू करने के लिए iScroll का उपयोग करता है।Backbone.js विचारों में कस्टम ईवेंट को ट्रिगर/बाध्य कैसे करें?

iScroll एक onScrollEnd घटना प्रकाशित करता है, लेकिन मैं बाँध/देखें अंदर की सदस्यता के लिए प्रतीत नहीं कर सकते हैं:

App.Views.Scroller = Backbone.View.extend({ 

    events: { 
     'onScrollEnd' : 'scrollEnd' 
    }, 

    initialize: function(){ 
     var self = this; 
     this.scroller = new iScroll('content-scroller', { 
      onScrollEnd: function() { 
       self.trigger('onScrollEnd'); 
      } 
     });  
    }, 

    scrollEnd: function(e){ 
     // never called :(
     console.log(e); 
    } 

}); 
+0

मैंने बैकबोन के साथ स्क्रोलर ऑब्जेक्ट को विस्तारित करने का भी प्रयास किया। एवेन्ट्स – meleyal

उत्तर

24

आपका onScrollEnd घटना को देखने के प्रमुख तत्व के लिए बाध्य है; scrollEnd को तब कॉल किया जाएगा जब दृश्य के HTML तत्व को ऑनक्रोल एंड ईवेंट प्राप्त हुआ था।

लेकिन आप अपने व्यू ऑब्जेक्ट पर ऑन-स्क्रॉलेंड ईवेंट ट्रिगर कर रहे हैं, तत्व नहीं।

तो शायद आप शायद $(self.el).trigger('onScrollEnd'); कहना चाहें, या शायद सीधे फ़ंक्शन को कॉल करें: self.scrollEnd()

+0

मैंने सीधे फ़ंक्शन को कॉल करना समाप्त कर दिया। बिंदु को हराने के लिए लगता है लेकिन यह काम करता है :) – meleyal

+1

या कम verbose 'self। $ El.trigger ('onScrollEnd');'। – VisioN

18

आप समारोह सीधे या अपने init में बुलाना चाहिए, इस जोड़ें:

self.bind('onScrollEnd', self.scrollEnd); 
25

यह स्पष्ट नहीं हो सकता है, लेकिन backbone.js विचारों में event संपत्ति केवल डोम की घटनाओं के लिए प्रयोग किया जाता है। कस्टम घटनाओं को James Brown mentioned above के रूप में बाध्य किया जाना चाहिए।

+2

मेरे लिए यह उत्तर स्वीकार्य उत्तर के समान ही महत्वपूर्ण था। धन्यवाद। –

संबंधित मुद्दे