Дополнительные параметры для плагина jquery - PullRequest
2 голосов
/ 25 января 2012

Я разрабатываю плагин. Плагин drag n 'drop, если быть точным.

Мои значения по умолчанию выглядят так:

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
}

Тогда я использую:

var o = $.extend(defaults, options)

Чтобы получить значение по умолчанию.

Ex. o.cursorAt.left. Это позволит получить значение параметра Sub left в cursorAt Как видите, у меня есть подопции (как я их называю), и они выглядят так:

cursorAt: {
    top: false,
    bottom: false,
    left: false,
    right: false
},

Когда я использую это в своем плагине, я хочу использовать только один. Например:

cursorAt: {
    bottom: 0
}

Но это не работает, и я знаю, что это потому, что по умолчанию в курсоре в месте должно быть следующее:

{
    top: false,
    bottom: false,
    left: false,
    right: false
}

Есть ли способ заставить его работать, поэтому мне нужно назвать только одно. Есть ли простой способ? Или это будет сложный и сложный процесс. Мой код плагина уже состоит из 1000 строк, поэтому я не хотел бы вносить серьезные изменения.

Примеры Jsfiddle:

Это работает:

http://jsfiddle.net/C4f97/

Но это не так: http://jsfiddle.net/C4f97/1/ << Мне нужно, чтобы это работало ... </p>

Любые комментарии к моему плагину были бы хороши;) Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 25 января 2012

Попробуйте вместо этого:

var o = $.extend(true, {}, defaults, options);

Здесь есть две примечательные детали.Первым является логическое значение true, которое указывает jQuery рекурсивно расширять их (не перезаписывать ваши «подопции»).

Второй - {}, который создает новый объект, поэтому вы фактически не изменяете настройки по умолчанию каждый раз, когда создаете новый экземпляр.

3 голосов
/ 25 января 2012

Когда вы копируете параметры в свои значения по умолчанию, вы хотите использовать «глубокое копирование», которое повторяется через подобъекты и копирует все.

$.extend(true, defaults, options);

http://api.jquery.com/jQuery.extend/

1 голос
/ 25 января 2012

Используйте $.extend(true, defaults, options) для глубокого копирования в рекурсивное слияние. jQuery.extend

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...