2015-07-30 16 views
5

Benim vanilla JS komut dosyalarından biri için jQuery eklentisi yapma konusunda yardıma ihtiyacım var, this here geçerli jQuery eklentisi, ama sonraki sürüm daha fazla yöntemle çalışır ve bunları bir şekilde ele almam gerekir. Javascript: object [method]() çalışmıyor ya da bir jQuery eklentisi için basit bir Javascript kodu nasıl kurabilirim?

Şu anda üzerinde çalıştığım bu

(function($) { 
    var t; 
    $.fn.KUTE = function(method, start, end, ops) { // method can be Animate(), fromTo(), to(), stop(), start(), chain(), pause(), stop(), etc 
     return this.each(function(){   
      if (method === 'to') {     
       t = new KUTE[method](this, null, end, ops); 
      } else if (method === 'fromTo' || method === 'Animate') { 
       t = new KUTE[method](this, start, end, ops); 
      } 
      if (t !== undefined && typeof t[method] === 'function') { 
       console.log(t) // this shows proper object 
       t[method]() // this doesn't work 
      } 
     }); 
    }; 
})(jQuery);  

Neden t[method]() çalışmıyor ve bunu çalışmasını nasıl sağlayabilirsiniz?

GÜNCELLEME: Bu kodun işler üzerinde nasıl çalıştığına dair bazı örnek kodları ekliyorum. Temelde ben

var tween = $(div).KUTE('to', { left: tl }, { easing: easing, duration: 1000 }); 

Sonra stop(), onu ve diğer yöntemlerle bunu start() gereken bir ara nesne oluşturmak.

$(tween).KUTE('start'); // this should basically be it. 

Şimdi, call() ve apply() gibi bazı JavaScript şeyler okuyordum ve ben tür çalışması için bu gerekli olabilir düşünüyordum, ama buna rağmen t[method].call(t) // where t is "this" yüzden çalışmıyor. Umarım problemimi belirtmek için doğru yazarım, lütfen yanlış bir şey varsa beni düzeltin.

Çok teşekkürler.

+0

Sorunun olduğundan emin değilim, ancak sorun satırında bazı noktalı virgülleri kaçırıyorsunuz. Onları tamir etmeyi dene. – Katana314

+0

@ Katana314 Güzel ASI karşıtıyken, bu satırlarda hataya neden olan hiçbir şey yok. –

+6

Ne demek "çalışmıyor?" Hangi hatayı alıyorsun? – ssube

cevap

6

Neden olduğunu öğrendim, yukarıdaki son yorumumu açıklıyor ve farklı bir jQuery işlevi yaptım. Sonraki yapmak

(function($) { 
    $.fn.KUTE = function(method, start, end, ops) { // method can be Animate(), fromTo(), to(), stop(), start(), chain(), pause() 
     var tws = [], i, l = this.length; 

     for (i=0;i<l;i++){ 
      var mt = this[i][method]; 
      if (typeof mt === 'function') { 
       mt.apply(this[i]); 
      }  
      if (method === 'to') { 
       tws.push(new KUTE[method](this[i], start, end)); // here start is end and end is ops 
      } else if (method === 'fromTo' || method === 'Animate') { 
       tws.push(new KUTE[method](this[i], start, end, ops)); 
      }   
     } 
     return tws; 
    }; 
})(jQuery); 

this.length > 1 eğer FOR() güzel bir yerine süper kötü ve jQuery.each() çirkin yapmak vardır. Bir örnek için codepen adresime bakın.

GÜNCELLEME: Ayrıca FOR ekledim ve beklendiği gibi çalışır. Yukarıdaki cevabı güncelledim.

İlgili konular