2016-09-01 4 views
0

플러그인을 개발했으며, 플러그인을 호출하여 Uncaught TypeError: Cannot read property 'convert' of undefined과 같은 오류가 발생했습니다. 여기 jquery Plugin에서 public 메소드를 호출했습니다.

내가 내 스크립트에서 호출 할 때 그것이 작동하지 내 플러그인이며, 내가 도착에 내 플러그인을 수정하는 방법

(function ($) { 

$.siPrifixx = function(element, options) { 

    var defaults = { 
     foo: 'bar', 
     onFoo: function() { 
     } 
    } 
    var plugin = this; 
    plugin.settings = { 
        maxDigits: 8, 
        seperator: true, 
        decimal: 1, 
        popUp: false, 
        countUp:false 
    } 

    var $element = $(element), 
     element = element; 

    plugin.init = function() { 
     var value =$(element); 
     console.log(value); 
     plugin.settings = $.extend({ 
     }, defaults, options); 
     var maxDigits = plugin.settings.maxDigits; 
     console.log(defaults); 
       if (typeof value === 'string') { 
          var parts = value.split(","); 
          var num = parts.join(""); 
          var isNumber = regIsNumber(num) 
          if(isNumber){ 
           var number = (parseInt(num)); 
          }else{ 

           number = num; 
          } 
         }else if (typeof value === 'number'){ 
           number = value 
         } 
          var data_max = $(this).attr('data-max-digit'); 
          if(typeof data_max !== 'undefined'){ 
           maxDigits = data_max; 
          } 

         var checkNumber = typeof number !== 'undefined' && !isNaN(number) && Math.round(number).toString().length > maxDigits; 
         if (plugin.settings.popUp && checkNumber) { 
          $(this).addClass('tooltip', value); 
          var tootip = $(this).tooltipster({ 
           theme: 'tooltipster-default', 
           functionInit: function() { 
            return value 
           } 
          }) 
          if(!tootip) 
           console.log("We couldn't find tooltipster function.Please make sure you have loaded the plugin") 
         } 
          if (plugin.settings.countUp && (Math.round(value).toString().length <= maxDigits)) { 
             var cUp = new countUp( 
             plugin.settings.countUp, 0, Number(value), 0, 1, null); 
             cUp.start(); 
            if(!cUp) 
            console.log("We couldn't find counter function.Please make sure you have loaded the plugin") 
          } 
         if (checkNumber) { 
          var results = plugin.convert(number); 
          $(this).html(results); 
         } else { 

          if (plugin.settings.seperator) { 
           var cvalue = numberWithCommas(value) 
           $(this).html(cvalue) 
          } else { 
           $(this).html(value) 
          } 
          if(typeof value === 'string') 
           if(checkDate(value)){ 
            $(this).html(value) 
           } 
       } 
    } 

    plugin.convert = function(number){ 
     var n = settings.decimal 
     var decPlace = Math.pow(10, n); 
     var abbrev = ["K", "M", "B", "T"]; 
     for (var i = abbrev.length - 1; i >= 0; i--) { 
      var size = Math.pow(10, (i + 1) * 3); 
      if (size <= number) { 
       number = Math.round(number * decPlace/size)/decPlace; 
       if ((number == 1000) && (i < abbrev.length - 1)) { 
        number = 1; 
        i++; 
       } 
       number += abbrev[i]; 
       break; 
      } 
     } 
     console.log(number); 
     return number; 
    } 
    plugin.init(); 

    //use to convert numbers with comma seperated 

} 

$.fn.siPrifixx = function (options) { 
    return this.each(function() { 
     if (undefined == $(this).data('siPrifixx')) { 
      var plugin = new $.siPrifixx(this,options); 
      $(this).data('siPrifixx', plugin); 
     } 
    }); 
}; 
}(jQuery)); 

내 코드에 문제가 무엇인지 $(this).data('siPrifixx').convert(value);}); 으로 플러그인을 호출하는 데 사용? 공장?

코드에서 convert 메서드는 어떻게 호출 할 수 있습니까?

+0

'plugin.init' 정의되지 않는 이유는 무엇입니까? 'console.log ($ (this) .data ('siPrifixx'))'로그는 무엇입니까? – guest271314

+0

초기화가 있지만 잘못되었거나 잘못되었습니다. 확인해보십시오! –

+0

'console.log ($ (this) .data ('siPrifixx'))'는'undefined'입니다. –

답변

1

한 가지 방법은 다음 각 리턴은 결과를 예상 개별 부분으로 플러그인 분할 기능

에서 전체 플러그인까지 하나를 사용하여 개별 작업 부분 하나를 병합하는 것

(function($) { 
 

 
    var settings = { 
 
    maxDigits: 8, 
 
    seperator: true, 
 
    decimal: 0, 
 
    popUp: false, 
 
    countUp: false 
 
    } 
 

 
    function convert(number, options) { 
 
    var opts = $.extend(settings, options || {}); 
 
    var n = opts.decimal; 
 
    console.log(opts); 
 
    var decPlace = Math.pow(10, n); 
 
    var abbrev = ["K", "M", "B", "T"]; 
 
    for (var i = abbrev.length - 1; i >= 0; i--) { 
 
     var size = Math.pow(10, (i + 1) * 3); 
 
     if (size <= number) { 
 
     number = Math.round(number * decPlace/size)/decPlace; 
 
     if ((number == 1000) && (i < abbrev.length - 1)) { 
 
      number = 1; 
 
      i++; 
 
     } 
 
     number += abbrev[i]; 
 
     break; 
 
     } 
 
    } 
 
    this.data("number", number); // set `number` at `.data("number")` 
 
    return this; // return `this` for chaining jQuery methods 
 
    } 
 
    $.fn.convert = convert; 
 
}(jQuery)); 
 

 
var div = $("div"); 
 

 
div.convert(1500000, {decimal:1}); 
 

 
console.log(div.data("number"))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div></div>

0

이 같이 호출해야합니다

$(this).data('siPrifixx').plugin.convert(value);}); 
관련 문제