4

プラグインを使用していると、次のようなプラグインに出くわすことがあります。

  • コンストラクタ引数を取ります。
  • 一部のパラメータは関数に解決されます。
  • それらのいくつかは、複数の引数を取ります。

このような:

{
    color: function (someData, moreData) {
        return someData + moreData;
    }
}

その関数に 2 つの引数を渡すにはどうすればよいですか?

注: プラグインを変更できないため、2 番目の引数を別のコンストラクター引数に移動することはできません。

サンプル JavaScript:

(function ($) {
    $.fn.greenify = function (options) {
        var settings = $.extend({
            color: function (someData, moreData) { // <-- THIS TAKES 2 ARGUMENTS!
                return someData + moreData;
            },
        }, options);
        return this.css({
            color: settings.color,
        });
    };
}(jQuery));

$("#target1").greenify({
    color: "blue"
});

$("#target2").greenify({
    color: ["bl", "ue"]   // <-- In your answer only this should be changed
});

私の目標:

<div id="target1">My Thing</div>   // <-- will be blue
<div id="target2">My Thing2</div>  // <-- will be black but should be blue

フィドルのデモ


更新: 私は、このコードの大きな誤解に陥りました

$("#target1").greenify({
    color: "blue"
});

最初のパラメーターとして値を渡し"blue"ます。これは誤りです!実際に起こることは、デフォルトのコールバック ( ) が完全に文字列に置き換えられることです!function (someData, moreData)someDatafunction (someData, moreData)"blue"

4

3 に答える 3

0
var settings = $.extend({}, options);
if($.isArray(options.color)) {
    settings.color = function () {
        return options.color.join('');
    };
}

フィドル: http://jsfiddle.net/2QBGm/

于 2013-06-03T14:09:16.540 に答える
0

このjsFiddleを参照してください

私はあなたのコードにいくつかの変更を加えましたが、今ではあなたが望むように動作しています。

options オブジェクトを使用して引数を取得しました。

color: function () {
    return options.color[0] + options.color[1];
}
于 2013-06-03T14:33:42.363 に答える