0

Перейти вниз на вопросJQuery плагин - запуск внутренних функций с помощью обратного вызова

JQuery плагин:

$.fn.myPlugin = function(options) { 
    var options = $.extend({ 
     myOption: true, 
     edit: function() {}, 
     done: function() {} 
    }, options); 

    options.edit.call(this); 
    options.done.call(this); 

    //plugin guts removed to prevent over complication 

    return { 
     edit: function(obj) { 
      $(obj).closest('#myParent').find('#myInput').autosizeInput(); //plugin to autosize an input 
     }, 
     done: function(obj) { 
      $(this).closest('tr').find('td').not('.not').each(function(i) { 
       //do some things 
      }); 
     } 
    } 
}); 

Имейте в виду, что это урезанная версия моего плагина.

Вызывается со страницы:

$(document).ready(function() { 
    var myPlugin = $('.editable').myPlugin({ 
     edit: $(this).on('click', '.edit-td', function(e) { 
      e.preventDefault(); 
      //do some page specific stuff 
      myPlugin.edit($(this)); //call the edit returned function 
     }), 
     done: $(this).on('click', '.done-td', function(e) { 
      e.preventDefault(); 
      //do some page specific stuff 
      myPlugin.done($(this)); //call the done returned function 
     }); 
    }); 
}); 

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

меня пытались в том числе делегированных событий в моем плагине:

$(this).on('click', '.edit-td', function(e) { 
    e.preventDefault(); 
    $(this).closest('#myParent').find('#myInput').autosizeInput(); 
}); 

$(this).on('click', '.done-td', function(e) { 
    e.preventDefault(); 
    $(this).closest('tr').find('td').not('.not').each(function(i) { 
     //do some things 
    }); 
}); 

Но когда .edit-td активизирован, он распространяется и вызывает .done-td события, если я ставлю e.stopPropagation() в функции edit-td (потому что он был делегирован) edit-td прекращает стрельбу полностью.

И не делегировал метод:

$(this).find('.done-td').click(function(e, this) {}); 

Но я не могу разобрать возвращаемый объект (this) к внутренней функции до того, как внутренняя функция завершена. (просто не определено или missing formal parameter).

* Перейти к здесь

Чтобы избежать вопроса становится локализованным -

мне нужно иметь функции, вызываемые внутри моего плагин каждый раз, когда конкретная функция обратного вызова срабатывает. без вызова его использования замыканий

Что-то вроде:

if($.fn.myPlugin.callback().is('edit')) { 
    //fire function 
} 
+0

http s: //learn.jquery.com/plugins/advanced-plugin-concepts/ – Rashi

+0

Это было интересное чтение и на самом деле я решил свой вопрос. Пожалуйста, предоставьте это как ответ, и я соглашусь. Wibble. – Edward

+0

Когда я прочитал вопрос, я подумал, что у вас не было идеи о обратном вызове, поэтому я прокомментировал эту ссылку. если вы получили ответ, вы можете закрыть вопрос или сохранить его для получения более точных ответов. У меня нет большой идеи о том, чего вы хотите достичь. – Rashi

ответ

0

мне нужно возвращать функцию() следующим образом:

return { 
    enable: function(arg) { 
     //do something 
    }, 
    disable: function(arg) { 
     //do something 
    } 
} 

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

this.myPlugin().disable(); 
Смежные вопросы