Огонь обратного вызова в функции - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь создать свою первую собственную функцию jQuery, чтобы переупорядочить некоторые строки в таблице.

Функция работает довольно хорошо, я просто не уверен, как запускать функции обратного вызова, которые я должен уметьустановить в настройках объекта.Также это способ сделать функцию JQuery?Код можно увидеть в действии здесь: http://jsfiddle.net/fcHQh/

Функция:

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

        var settings = {
            'up': '.up',
            'down': '.down',
            'timeout': 1000,
            'url': '',
            'success': null,
            'error': null
        };

        var methods = {
            init : function(element) {
                $(settings.up + ',' + settings.down).on('click', function (event) {
                    event.preventDefault();
                    var row = $(this).parents('tr:first');
                    if ($(this).is(settings.up)) {
                        row.insertBefore(row.prev());
                    } else {
                        row.insertAfter(row.next());
                    }
                    tools.delay(function() { methods.sort(element) }, settings.timeout);
                });
            },
            sort : function(element) {
                $(element).find('tr').find('input:hidden').each(function () {
                    element.priorities.push($(this).val());
                }); 
                if (settings.url) {
                    methods.callback(element);
                }
            },
            callback : function(element) {
                            // THIS SHOULD ONLY BE FIRED IF CALLBACK IS DEFINED?
                $.ajax({
                    type: 'GET',
                    url: settings.url,
                    data: { priorities: element.priorities.join(',') },
                    success: function() {
                    // FIRE THE 'settings.success' if its set
                    },
                    error: function() {
                    // FIRE THE 'settings.error' if its set 
                    }
                });
            }
        };

        var tools = {
            delay : (function () {
                var timer = 0;
                return function (callback, ms) {
                    clearTimeout(timer);
                    timer = setTimeout(callback, ms);
                };
            })()
        } 

        return this.each(function() {
            if (options) $.extend(settings, options);
            this.priorities = [];
            methods.init(this);
        });
    };
})( jQuery );

1 Ответ

2 голосов
/ 14 февраля 2012

Я предлагаю вам использовать объект по умолчанию и объединить его с вашими параметрами:

var defaults = {
  up: '.up',
  down: '.down',
  timeout: 1000,
  url: '',
  success: function() {},
  error: function() {}
};

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

// ...
callback: function() {
  $.ajax({
    success: settings.success,
    error: settings.error
  });
},
// ...
...