структура для использования JQuery в качестве функции и в качестве метода? - PullRequest
1 голос
/ 15 августа 2011

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

$("myelement").myfunction({title: blah});

Однако, как я могу использовать ее как отдельную функцию без элемента? Пример:

$.myfunction({title: blah});

Когда я делаю это в данный момент, я получаю «$ .myfunction is not function»

Спасибо!

Редактировать: текущий код:

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

    var defaults = {
        'action'    : 'gettasks',
        'list'      : 'default',
        'task'      : '',
        'title'     : ''
    };

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

    return this.each(function() {

        var $this = $(this);
        var ajax_load = "<img class='loading' src='images/ajax-loader.gif' alt='loading...' />";
        var urlparams;

        if ( options.action == 'gettasks' ) {
            urlparams = "action=gettasks";
            urlparams += "&list="+options.list;
        }

        if ( options.action == 'getlists' ) {
            urlparams = "action=getlists";
        }

        if ( options.action == 'create' ) {
            urlparams = "action=create&list="+options.list+"&title="+options.title;
        }

        if ( options.action == 'update' ) {
            urlparams = "action=update&list="+options.list+"&taskid="+options.task;
        }


        $.ajax({
            url: "include/tasks_handler.php?"+urlparams,
            cache: false,
            beforeSend: function() {
                $this.html(ajax_load);
            },
            success: function(html){
                $this.html(html);
                if ( options.action == 'update' ) {
                    $("#taskList").tasks();
                }
            }
         });

    });
  };
})( jQuery );

Ответы [ 5 ]

2 голосов
/ 15 августа 2011

Определите его как функцию, подобную этой

$.myfunction = function(options){
   //method logic here
};

//Use it here
$.myfunction({title: blah});

Однако, таким образом, вы не можете использовать jQuery цепочку до тех пор, пока вы не вернете объект jQuery из этого метода.

1 голос
/ 15 августа 2011

В дополнение к другим ответам, опубликованным здесь, показывающим вам, как это сделать, важно отметить следующее: следует ли использовать $ пространство имен или $.fn пространство имен?

Если вы видите внутреннюю часть jQueryметоды, они делают следующее различие:

  • $.fn используется для работы с элементами DOM
  • $ используется для работы с объектами (массивами, коллекциями, POJO и т. д.), не зная о существовании DOM.
1 голос
/ 15 августа 2011

Добавьте вашу функцию к самому объекту jQuery, а не к jQuery.fn.

например

$.myfunction = function() { ... };
0 голосов
/ 15 августа 2011

Вы можете определить это так:

jQuery.myfunction = function(options) {
    alert(options.title);
};

и вызвать так:

$.myfunction({title: 'foo bar'});
0 голосов
/ 15 августа 2011

Да. Просто сделай это так:

$.pluginName = function(/* arguments here */) {
   // Plugin Code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...