3

独自のjqueryプラグインを作成しました。そのように設定されています。

;(function ($)
{
    $.fn.bpeditor = function (options)
    {
        return this.each(function() 
        {
            // Merge passed options with defaults
            vars.options = $.extend({}, $.fn.bpeditor.defaults, options);

            alert(vars.options.test);
         }
     }

     var vars =
     {
         options: null
     };

     $.bpeditor.defaults =
     {
         user: 'a',
         dkey: 'b',
         side: 'c',
         test: 'd'
     };

})(jQuery);

私はそれをそのように呼びます:

$('div#canvas').bpeditor
({
    user: 'user1',
    dkey: 'dkey1'
});

ご覧のとおり、「user」オプションと「dkey」オプションを渡しますが、「test」は渡しません。テストにはデフォルト値があり、プラグインで設定されていません。プラグインのアラートは、vars.options.testの内容を表示する必要があります。これは、$。bpeditor.defaultsの内容で埋められる必要がありますが、未定義として返されます。

誰か助けてもらえますか?

ありがとう

4

2 に答える 2

8

あなたは忘れました.fn.

$.fn.bpeditor.defaults = {
    ...
};

注意:プラグインの外部で変更できるようにデフォルトのオプションを公開することは珍しいことです。

プラグインのみがアクセスできる字句スコープの変数であることがより一般的です。また、.eachループ内でオプション変数を再作成する必要はありません。これらの影響を受ける要素はすべて、同じオプション状態を共有している必要があります。

(function($) {

    // only created once, shared between all instances
    var defaults = {
        ...
    };

    $.fn.bpeditor = function (options) {
        options = $.extend(true, {}, defaults, options);
        return this.each(function() {
            alert(vars.options.test);
        });
    };
})(jQuery);

この行は、デフォルトと指定されたオプションを新しい空のオブジェクトに深くコピーし、変数$.extend()を再利用します。オブジェクトが一定のままであり、渡されたオブジェクトが変更されないようにします。optionsdefaults

于 2012-12-21T13:40:58.417 に答える
0

FiddleSticks

(function($) {
    $.fn.bpeditor = function(options) {
        var defaults = {
            user: 'a',
            dkey: 'b',
            side: 'c',
            test: 'd'
        };
        // Merge passed options with defaults
        options = $.extend(defaults, options);

        return this.each(function() {
            // Tooltip plugin code here
        });
    }
})(jQuery);
于 2012-12-21T13:51:28.667 に答える