2013-08-31 69 views
-2

我已經創建了一個項目一個jQuery插件: http://jsfiddle.net/4kb9R/144/jQuery插件錯誤對象的翻譯:有沒有方法「方法名」

我想這個插件能夠要麼作爲,過程中的插件,但也有一個公共方法可用稱爲init,基本上做同樣的事情。

我遇到的問題是,當我試圖通過公共初始化函數,我無法使用運行私有函數運行:

self = this; 

    //Start using the amountFormatter 
    this.init = function(elements) { 
     if(elements instanceof jQuery) { 
      //Check the value of each element and update it accordingly 
      elements.each(function() { 
       var $this = $(this); 
       var elementIsInput = $this.is("input"); 

       value = $this.val() == "" ? $this.text().trim() : $this.val().trim(); 
       value = (typeof value === 'undefined') ? '0' : value; 

       value = thousandSeperator(
        convertNumber(roundingOfNumber(value, config.rounding)) 
       ); 

       //Checks whether we need to add the new amount as text or as a value 
       return elementIsInput === true ? 
        elem.val(addCurrencyToNumber(value)) : 
       elem.text(addCurrencyToNumber(value)); 
      }); 
     } 
     else { 
      if(elements.length !== 0) {      
       for (var i = 0; i < elements.length; i++) { 
        var value = elements[i]; 

        //I get the error here, when I'm using self; 
        elements[i] = self.addCurrencyToNumber(
             self.thousandSeperator(self.convertNumber(self.roundingOfNumber(value, config.rounding))) 
           ); 
       } 
       return elements; 
      } 
     } 
    }; 

    this.init(elem); 

我這樣調用該函數:

var containerWithValue = $('.sf-insurance-amount'); 
var amountToTransform = containerWithValue.text(); 
var AmountsToFormat = ["4512.45", "784,687", "875943,5975"]; 

//Shows the original value... 
$(".sf-insurance-amount-original").text("Original: " + amountToTransform); 

// With options... 
containerWithValue.amountFormatter({ 
    culture: "en",     
    valuta: "euro", 
    rounding: 3 
}); 

var amountFormatterData = containerWithValue.data('amountFormatter'); 
var newAmounts = amountFormatterData.init(AmountsToFormat); 
console.log(newAmounts); 

$.each(newAmounts, function(index, value) { 
    $(".sf-insurance-amount-provided ul li").eq(value-1).html(value); 
}); 

任何人都有一個想法,這是爲什麼?我在這裏錯誤地使用了這個關鍵字嗎? 我很想爲此獲得解決方案。

+2

始終包括相關的代碼和標記**的問題本身**,不只是鏈接(甚至沒有的jsfiddle)。小提琴是一個很好的*補充*,而不是替代品。 –

+1

沒問題,調整。 –

回答

0

愚蠢的錯誤。我改變了事情。我嘗試了它,就像我想在私人內部使用公共功能一樣。我應該注意到它。如果我想訪問一個公共函數中的私有函數,我只需要調用該函數而不需要這個關鍵字。

所以它應該是:

this.init = function(elements) { 
    if(elements.length !== 0) {      
     for (var i = 0; i < elements.length; i++) { 
      var value = elements[i]; 
      elements[i] = addCurrencyToNumber(
             thousandSeperator(convertNumber(roundingOfNumber(value, config.rounding))) 
           ); 
     } 
     return elements; 
    } 
}; 
相關問題