2013-07-29 2 views
-1

Я работаю над плагином jQuery под названием popup. Это мой первый плагин jQuery, поэтому я стараюсь следовать учебному курсу на jQuery-сайте. Я хочу реализовать что-то, чего я не нашел в их ссылке: событие onOkay(function(e){ });. Я хочу, чтобы разработчик, чтобы иметь возможность вызвать этот обработчик события так:Создание настраиваемого события плагина в jQuery

$("#message").popup().onOkay(function(e) { 
    // some code here 
}); 

Что я должен сделать, чтобы реализовать код для работы, как это?

+1

Стандартный способ предложить обратные вызовы в качестве параметров внутри вашего плагина: $ ('# message'). Popup ({onOkay: function (e) {...}}); –

+1

Прежде чем идти дальше, я предлагаю вам взглянуть на http://plugins.jquery.com/tag/modal/ –

+1

@Victor, прежде чем пытаться свернуть свою собственную парадигму плагина пользовательского интерфейса, я бы предложил вам посмотреть на существующий виджет такие как [фабрика виджета jQuery UI] (http://api.jqueryui.com/jQuery.widget/) ([подробнее] (http://wiki.jqueryui.com/w/page/12138135/Widget%20factory)). Эта фабрика используется jQuery UI, jQuery Mobile и многими другими плагинами, а разработчики, с которыми вы нацеливаетесь со своим собственным плагином, будут более эффективны с ним, если он будет следовать шаблону, который они уже знают (и для некоторых - любить). –

ответ

1

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

$.fn.myPlugin = function(){ 
    return this.each(function(){ 
     var $self = $(this); 

     ... generate markup and show popup ... 
     okbtn.on('click',function(e){ 
      e.preventDefault(); 
      if ($self.triggerHandler("mypluginok")) { 
       // do your plugin stuff 
      } 
     }); 

    }); 
}; 

$("#someel").myPlugin().on("mypluginok",function(){ 
    console.log("Ok button pressed!") 
    // return false; // this would prevent the plugin's click handling 
}) 

Он не предложил добавить дополнительные методы, такие как onOkay, что и может конфликтовать с другими плагинами, если указанные другие плагины также определить onOkay метод на $.fn.

+0

Я получаю 'Не могу вызвать метод 'на" on undefined' – Victor

+0

@Victor, что означает, что вы пропустили эту часть: 'return this.each (function() {' что-то, что должно (по-моему) быть частью каждого назначенного плагина на '$ .fn' –

1

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

plugin_func = function(params, callback){ 
    // Do some awesome stuff with params 
    var callback_arguments = 'foo' + params; 
    callback(callback_arguments); 
} 

Теперь вы вызываете эту функцию с функцией обратного вызова, как это:

plugin_func('bar', function(response){ 
    console.log(response); 
}); 

Вот еще один способ использования обратных вызовов, если вам нужно манипулировать объем с обратными вызовами: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

callback.apply(thisScope, [ array_of_args_passed_to_callback ] 
Смежные вопросы