2013-02-18 3 views
1

Я пишу плагин, который создаст некоторые DIV и применит стили к ним при инициализации плагина. В приведенном ниже примере кода я делаю такие вещи, как применение .disableSelection() к некоторым элементам.document.ready() на jQuery плагин init?

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

Если это так, то что я могу использовать вместо document.ready для применения стилей и т. Д. При инициализации плагина?

$.examplepluginname = { 
id: 'examplepluginname' 
,version: '1.0' 
,copyright: 'Copyright (c) 2013 Example Name' 
,uri: 'http://www.example.com/' 
,licensed: { 
    MIT: 'http://www.opensource.org/licenses/mit-license.php' 
    ,GPL: 'http://www.gnu.org/licenses/gpl.html' 
} 
/*,plugin: function(prepare,sort){ 
    aPluginPrepare.push(prepare); // function(settings){doStuff();} 
    aPluginSort.push(sort);   // function(valuesAreNumeric,sA,sB,iReturn){doStuff();return iReturn;} 
}*/ 
,defaults: { // default settings 
    searchDefaultText: 'Search & hit ENTER to add to list' //Text to show when user is not entering a search term 
} 
}; 

(function($) { 
//Attach this new method to jQuery 
$.fn.extend({ 
    //pass the options variable to the function 
    examplepluginname: function(options) { 

     var userSettings = $.extend($.examplepluginname.defaults, options) 
      //Switcher for when the user presses enter before search results come back 
      ,selectOnlyResult = false 
      //Arrow key navigation setting 
      ,displayBoxIndex = -1 
     ; 

     /* 
      RUN INITIALIZATION SETTINGS 
     */ 
     $("#availableItems").disableSelection(); 
     displayAvailableItems(); 
     //Set the display styles  
     $('#tagSearch').css({ 
      'width': '100%', 
      'border-radius': '5px', 
      'outline': '0 none', 
      'padding': '2px 3px', 
      'font-style': 'italic' 
     }); 

     return this.each(function() { 
}); 
     } 
    }); 
})(jQuery); 
+0

Я немного смущен. Если это плагин, который вы написали, вы должны применить эти стили как часть инициализации плагина на элементе ... –

+0

@AnthonyGrist Что значит? Например, я намереваюсь кого-то вызвать '$ ('# examplepluginnamecontainer'). Examplepluginname();' и заставить плагин генерировать div и стили, необходимые для запуска плагина, точно так же, как jQueryUI. Только требуется, чтобы пользователь сделал один контейнер, и пусть плагин генерирует внутренности. –

+1

Правильно, поэтому вам не нужно событие типа '$ (document) .ready()' вообще; это не имеет никакого отношения к событиям, насколько это необходимо. Вы выполняете ** все это ** внутри функции, которую они называют. –

ответ

1

Если это так, то что я могу использовать вместо document.ready для применения стилей и т. Д. При инициализации плагина?

Если ваш плагин нуждается в инициализации разовый (в отличие от требующих инициализации в использования), и вы не можете реорганизовать, чтобы избавиться от этого требования, то вам лучше иметь флаг в плагине указывая, была ли выполнена инициализация. Когда пользователь запускает ваш плагин (вызов для каждого использования), проверьте флаг, выполните однократную инициализацию, если необходимо, и обновите флаг. Затем выполните инициализацию для каждого использования (независимо от того, вы только что сделали одноразовый init или нет).

1

Я понимаю, что document.ready срабатывает один раз, когда документ загружен, и это все.

Нет, это не проблема. Если вы вызываете ready после того, как это событие произошло, оно просто вызовет функцию обратного вызова напрямую.

Смежные вопросы