2014-02-28 1 views
1

플러그인 메소드를 오버로드하고 싶습니다.JS에서 개체 메서드를 재정의하는 방법은 무엇입니까?

이것은 내가 사용하는 플러그인입니다. - 내가 잘못 뭐하는 거지

jQuery(document).ready(function($){ 
      $.fn.owlCarousel = $.extend($.fn.owlCarousel, { 
       updateControls:function() 
       { 
        console.log("!!"); 
        var base = this; 
        base.updatePagination(); 
        base.checkNavigation(); 
        if (base.owlControls) { 
         base.owlControls.show(); 
         base.owlControls.show(); 
        } 
       } 
      }); 
     }) 

console.log("!!"); 호출 할 나타나지 않습니다 :

updateControls : function() { 
      var base = this; 
      base.updatePagination(); 
      base.checkNavigation(); 
      if (base.owlControls) { 
       if (base.options.items >= base.itemsAmount) { 
        base.owlControls.hide(); 
       } else { 
        base.owlControls.show(); 
       } 
      } 
     }, 

이 메소드 오버로딩 내 스크립트는 다음과 같습니다 http://www.owlgraphic.com/owlcarousel/owl-carousel/owl.carousel.js

라이브러리는 다음과 같은 방법을 포함?

답변

1

이 경우 owlCarousel의 이니셜 라이저는 updateControls 내부 기능을 무시하는 옵션을 허용하지 않는 것으로 보입니다. 라이브러리를 수정하여 updateControls 기능에 대한 재정의를 허용 (및 사용)해야 할 수 있습니다.

이러한 편집의 예는 라이브러리의 init 함수를 수정하는 것이지만 기능을 재정의하려면 options 객체를 사용하는 것이 좋습니다.

var Carousel = { 
    init : function (options, el) { 
     var base = this; 

     base.$elem = $(el); 
     base.options = $.extend({}, $.fn.owlCarousel.options, base.$elem.data(), options); 

     base.userOptions = options; 

     // check for override in options of updateControls function 
     if (typeof base.userOptions.updateControls == "function") base.updateControls = base.userOptions.updateControls; 

     base.loadContent(); 
    } 

init 기능을 사용하면 두 번째 코드 예제에서했던 것처럼 당신의 updateControls 기능을 지정할 수 있습니다 것입니다 수정했습니다.