Настройка параметров по умолчанию в плагине jQuery

#jquery #jquery-plugins

#jquery #jquery-плагины

Вопрос:

Я ищу способ установить числовое значение по умолчанию для моих параметров по умолчанию моего плагина или иметь возможность получить значение по умолчанию с помощью вызова ajax. Другими словами:

   var defaults = {
        param1: 1000,
        totalTime : null // the default value i'm looking for in seconds
    }
 

Так что:

 $('.test').myPlugin({
    param1: 1000,
    totalTime: function () {
        $.ajax({
            url: 'totaltime.php',
            type: 'POST',
            success: function(data) {
                // retrieve value here
            }
        });         

    }
});

OR 

$('.test').myPlugin({
    param1: 1000,
    totalTime: 200 // numerical
});
 

Я только недавно начал играть с плагинами и нашел это интересной концепцией, но у меня возникли небольшие проблемы с этим. Вот как выглядит мой плагин сейчас (базовая настройка для нового плагина).

 (function($) {
    $.fn.myPlugin = function(options) {

        var plugin = this;

        var defaults = {
            param1: 1000,
            totalTime : null
        }

        plugin.init = function() {
            plugin.settings = $.extend({}, defaults, options);
            plugin.timer();
        }   

        plugin.settings = {}

        plugin.timer = function() {

        }

        plugin.init();
        return this;

    };

})(jQuery);
 

Ответ №1:

просто определите свои значения по умолчанию следующим образом:

 var defaults =$.extend( {
        param1: 1000,
        totalTime : null
    },options);
 

и затем вы можете использовать его как defaults.param1 или defaults.totalTime

Обновить:

в приведенном выше примере показано, как вы можете установить значение totalTime численно по умолчанию.

если вы хотите изменить его во время работы плагина, вы можете сделать это:

 defaults.totalTime=500;
 

или

 defaults.totalTime=givenVal; //givenVal is a variable that contains the value
 

также в вашем коде jQuery вы можете установить общее время следующим образом:

 $('#test').myPlugin({
    totalTime:500
});
 

или

 $('#test').myPlugin({
    totalTime:givenVal
});
 

итак, теперь все, что вам нужно сделать, это получить значение из ajax, поместить его в переменную и передать его вашему плагину, как указано выше!

Комментарии:

1. Но как это позволяет мне использовать функцию ajax для получения желаемого значения, а не просто вводить простое значение для totalTime?

2. вы имеете в виду, что хотите получить значение totalTime из ajax, а затем использовать его для элемента? если да, то вызов ajax внутри вашего плагина или снаружи?

3. Я хочу получить значение totalTime через ajax и использовать его для вычисления чего-либо в моем плагине. Я хочу либо ввести значение численно, либо получить значение через ajax.

Ответ №2:

@AminJafari указал, как правильно определить ваши значения по умолчанию. Ниже показано, как вызвать ваш плагин со значением из запроса ajax. ПРИМЕЧАНИЕ: totalTime callback должен возвращать значение, и значение должно быть доступно для возврата.— что означает, что это должно быть сделано в success обратном вызове ajax-запроса:

     $.ajax({
        url: 'totaltime.php',
        type: 'POST',
        success: function(data) {
            $('.test').myPlugin({
                param1: 1000,
                totalTime: function () {
                    // retrieve value here
                    return data.timeValue; //for example
                }
            });
        }
    });         
 

Комментарии:

1. Итак, нет способа присвоить значение из ajax, не обернув весь мой плагин в $.ajax ?

2. Вы могли бы сделать свой запрос synchronous , но это означает, что вы взяли A out of AJAX = SJAX . Просто обратите внимание, что синхронный запрос замораживает ваш браузер до завершения запроса.