плагин jquery, который не разделяет его конфигурацию между экземплярами - PullRequest
0 голосов
/ 14 апреля 2009

Я работаю с плагином jquery, который выглядит следующим образом:

(function($){
    var options;
    $.fn.main(opts){
        options = opts;
        //rest of code
    }
    $.fn.otherFunc(){
        //does something with options
    }
}(jQuery));

Проблема здесь в том, что если я использую этот плагин 5 раз на странице, переменная параметров перезаписывается, и поэтому все 5 экземпляров разделяют эти параметры. Это плохо, я хочу, чтобы каждый экземпляр плагина имел свою собственную конфигурацию.

Есть ли нехакский способ jQuery для этого?

редактирование:

Я должен добавить, что я бы рассматривал параметры добавления к $ (this) в $ .fn.main как несколько взломанный, так как $ .fn.otherFunc не может быть вызван для $ (this) из основной функции, так что у меня не будет доступа к моим вещам!

Ответы [ 2 ]

2 голосов
/ 14 апреля 2009

Если вы применяете один и тот же плагин к нескольким элементам, подобным этому

$("#div1, #div2, #div3, #div4, #div5").main(opts);

Вы должны разделить его на 5 разных звонков с разными опциями - т.е.

var opts1 = {...};
$("#div1").main(opts1);

var opts2 = {...};
$("#div2").main(opts2);

// etc.

Кроме того, добавьте параметр к $.fn.otherFunc, чтобы получить объект опций, с которым он должен работать.

РЕДАКТИРОВАТЬ: если вы не звоните otherFunc изнутри main(), вам следует подумать, почему вы делитесь вариантами между ними. В этом случае, если вы опубликуете исходную проблему (то есть проблему реального мира, которую вы пытаетесь решить), мы сможем предложить лучшее решение, чем использование двух разных плагинов, а не объединение их в один.

1 голос
/ 14 апреля 2009

В коде, приведенном в вашем примере, были синтаксические ошибки, я предполагаю, что это будет работать лучше:

(function($){
    var options;
    $.fn.main = function(opts){
        options = opts;
        //rest of code
        alert(options.text);
    }
    $.fn.otherFunc = function(){
        //does something with options
    }
})(jQuery);

$('a:first').main({text:'txt'});
$('a:last').main({text:'some other text'});

В вашем коде я бы порекомендовал добавить данные опций к самому элементу DOM, чтобы отслеживать опции, в конце концов, именно на это и направлено «поведение», поэтому естественно сохранять его там, а не в отдельный объект.

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