0

dom ノードを変換するプラグインがあります。これはそれが何をするかです:

$.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;
}

ご覧のとおり、それは self を返しているため、プラグインは理論的には次のように連鎖できます。

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

動作するはずですが、次のように書かれています:

キャッチされていない TypeError: 未定義のメソッド 'addClass' を呼び出せません

私は何を間違っていますか?

完全なコードはGitHubで確認できます。

4

1 に答える 1

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
};
于 2012-06-10T14:55:00.263 に答える