2012-06-10 45 views
0

我有一個插件來翻譯DOM節點。這一點,它做什麼:jQuery插件返回undefined

$.fn.jqTranslate = function (pkg, options) { 
    var self = this; 
    Translate.initialize(pkg, options).done(function() { 
     return self.each(Translate.translate); 
    }); 
}; 
translate: function() { 
    var elem = $(this), 
     key = elem.data('translate'); 
    if (Translate.translatable) { 
     if (Translate.translatedStrings[key]) { 
      if (Translate.translatedStrings[key].length === undefined) { 
       // The key have nested keys 
       Translate.translateElement(elem, Translate.translatedStrings[key].text); 
       delete Translate.translatedStrings[key].text; 
       elem.attr(Translate.translatedStrings[key]); 
      } 
      else Translate.translateElement(elem, Translate.translatedStrings[key]); 
     } 
    } 
    if (typeof Translate.options.onComplete === 'function') Translate.options.onComplete.apply(this, arguments); 
    return elem; 
} 

如果你看,它的返回自己這樣插件可以在理論上鍊是這樣的:

$('p').jqTranslate('global').addClass('translated') 

應該工作,但它說:

Uncaught TypeError: Cannot call method 'addClass' of undefined

我究竟做錯了什麼?

您可以檢查GitHub的完整代碼。

回答

2

您隱式地從您的插件中返回undefined。當你沒有return語句時,函數返回undefined

$.fn.jqTranslate = function (pkg, options) { 
    var self = this; 
    Translate.initialize(pkg, options).done(function() { 
     return self.each(Translate.translate); 
    }); 
    return this; //add return statement 
}; 
+0

謝謝@Esailija所以,在完成回調權限內沒有任何意義? –

+0

@AntonioLaguna,這取決於回調調用者如何處理返回的值。它雖然對外部功能沒有影響。 – Esailija