jquery插件的子选项

Sha*_*313 2 javascript jquery plugins jquery-plugins

我正在开发一个插件.确切地说是一个拖放插件.

我的默认值如下所示:

var defaults = {
    activeClass: false,
    containment: false,
    cookies: true,
    cookieExdate: 65,
    cursor: 'crosshair',
    cursorAt: {
        top: false,
        bottom: false,
        left: false,
        right: false
    },
    delay: 0,
    distance: 0,
    dragLimitation: false,
    ghostDrop: true,
    ghostOpacity: '0.50',
    ghostRevert: false,
    grid: [20,50],
    handle:false,
    iFrameFix: true,
    instantGhost: false,
    not: false,
    onDrop: function() {},
    onPickUp: function() {},
    radialDrag: true,
    radialOutline: false,
    radius: 100,
    revert: false,
    revertDuration: 500,
    strictMovement: false,
    target: {
        init: '#container',
        lock: false,
        offTarget: function(t) {
            $(t).removeClass('i');
        },
        onTarget: function(t) {
            $(t).addClass('i');
        }
    },
    zIndex: false
}
Run Code Online (Sandbox Code Playgroud)

然后我用:

var o = $.extend(defaults, options)

获取默认值.

Ex. o.cursorAt.left.这将让子选项的值leftcursorAt 正如你看到的我有子选项(我叫他们),他们是这样的:

cursorAt: {
    top: false,
    bottom: false,
    left: false,
    right: false
},
Run Code Online (Sandbox Code Playgroud)

当我在我的插件中使用它时,我只想使用一个.例如:

cursorAt: {
    bottom: 0
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我知道这是因为在cursorAt spot的默认值中必须有以下内容:

{
    top: false,
    bottom: false,
    left: false,
    right: false
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使它工作,所以我只需要命名一个.任何简单的方法?或者这将是一个艰难而复杂的过程.我的插件代码已经有1000行,所以我不想做出重大改变.

Jsfiddle的例子:

这有效:

http://jsfiddle.net/C4f97/

但这不是:http://jsfiddle.net/C4f97/1/ <<我需要这个才能工作......

对我的插件的任何评论都会很好;)在此先感谢!

Kat*_*ato 5

试试这个:

var o = $.extend(true, {}, defaults, options);
Run Code Online (Sandbox Code Playgroud)

这里有两个值得注意的细节.第一个是布尔值true,它告诉jQuery递归地扩展它们(不要覆盖你的"子选项").

第二个是{},它创建一个新对象,因此每次创建新实例时都不会实际修改默认值.