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'
});

如您所见,我传递了“用户”和“dkey”选项,但没有传递“测试”。测试有一个默认值,它没有在插件中设置。插件中的警报应该显示 vars.options.test 的内容,该内容应该用 $.bpeditor.defaults 的内容填充,但它会以未定义的形式返回。

任何人都可以帮忙吗?

谢谢

4

2 回答 2

8

你忘了一个.fn.

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

注意:公开您的默认选项以便可以在插件之外修改它们是不寻常的。

它们更常见的是只有插件才能访问的词法范围变量。也无需在.each循环内重新创建 options 变量——所有这些受影响的元素应该共享相同的选项状态:

(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()深复制默认值,然后将提供的选项复制到一个新的空对象中,重新使用options变量 - 确保defaults对象保持不变并且不修改传递的对象。

于 2012-12-21T13:40:58.417 回答
0

小提琴棒

(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 回答