Autor Zpráva
nothanks
Profil *
cjtel jsem si udelat v jquery plugin tak jsem koukal jak na to. a nejak jsem nepochopil tuto cast
http://docs.jquery.com/Plugins/Authoring#Namespacing
(function( $ ){

  var methods = {
    init : function( options ) { // THIS },
    show : function( ) { // IS   },
    hide : function( ) { // GOOD },
    update : function( content ) { // !!! }
  };

  $.fn.tooltip = function( method ) {
    
    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    
  
  };

})( jQuery );



konkretne nechapu proc jsou methods vyhozene mimo samotny plugin. navic kdyz budu mit timhle zpusobem udelane dva pluginy tak si prece ty methods prepisi ne?
pcmanik
Profil
Oni niesu vyhodene mimo plugin,

(function( $ ){
( jQuery );

Toto ti oznacuje zaciatok a koniec pluginu, takze ich tam mozes mat aj milion ale nic sa nestane, resp.

(function( $ ){

  var methods = {
    init : function( options ) { // THIS },
    show : function( ) { // IS   },
    hide : function( ) { // GOOD },
    update : function( content ) { // !!! }
  };

  $.fn.tooltip = function( method ) {    };

})( jQuery );


(function( $ ){

  var methods = {
    init : function( options ) { // THIS },
    show : function( ) { // IS   },
    hide : function( ) { // GOOD },
    update : function( content ) { // !!! }
  };

  $.fn.lightbox = function( method ) {    };

})( jQuery );



Obidva pluginy maju rovnake parametre, ale kazdy ma pri inicializacii iny nazov a to lightbox a tooltip, takze na seba nebudu mat vplyv
nothanks
Profil *
pcmanik:
stim bych nesouhlasil. myslim ze plugin je uzavreny v $.fn.tooltip = function( method ) {}
(function( $ ){
( jQuery );

by melo byt pro to aby se daly pouzivat $
pcmanik
Profil
Nie, cele je to plugin, od zaciatku do konca.

Tie metody ti len rozsiruju funkcionalitu
$.fn.tooltip = function( method ) {} 
Kcko
Profil
pcmanik:
Není to celé plugin. nothanks to vysvětlil správně, je to kvůli případnému konfliktu.
Kcko
Profil
nothanks:
Tady na tom to možná pochopíš lépe: http://blog.jeremymartin.name/2008/02/building-your-first-jquery-plugin-that.html
nothanks
Profil *
Kcko:
jj diky mezi asi dalsimi 10 tutorialy jsem to take objevil. naivne jsem si myslel ze bude nejaky jeden standardizovany postup na tvorbu pluginu ale jak jsem videl tak kazdy musi mit svuj postup.
kdyby tam nenapsali zrovna
var methods = { 

ale treba
var tooltip = { 

kdyz uz jsou to veci k tooltip pluginu tak by to bylo pro zacatecniky imho lepsi.
ah01
Profil
nothanks:
methods je objekt obsahující metody pluginu, takže to jméno je zvoleno správně. Tebe to možná mate, protože nechápeš všechny důsledky zabalení celého kódu do anonymní fce. [#3], jak ostatně naznačuje i věta v dotazu [#1]: „navic kdyz budu mit timhle zpusobem udelane dva pluginy tak si prece ty methods prepisi ne“.

Ne, nepřepíšou se. methods je lokální proměnná uvnitř anonymní funkce. Toto není záležitost jQuery, ale základy JavaScriptu. Podrobnosti najdeš např. ve vlákně Časté potíže, hlavně v sekci o lexikálních uzávěrách a v sekci o var.

naivne jsem si myslel ze bude nejaky jeden standardizovany postup na tvorbu pluginu
Pokud narážíš na to, že článek na který odkazuje Kcko namespacing pluginů nezmiňuje, tak to je tím, že ten článek je z února 2008. S tímto konceptem přišlo jQuery UI jehož první verze vyšla někdy v druhé polovině 2008. Mimo to je to technika, kterou využiješ u složitých pluginů, jako je např. jQuery UI.

Jako standard ber http://docs.jquery.com/Plugins/Authoring. Je to návod přímo od autorů jQuery.
nothanks
Profil *
ah01:
mas pravdu evidentne tedy nechapu spravne tuto cast
(function( $ ){
})( jQuery );

ani na odkazech co jsi mi dal jsem ktehle konstrukci nikde nic nenasel.

naivne jsem si myslel ze kdyz budu mit dva pluginy

(function( $ ){

  var methods = {
    init : function( options ) { // THIS },
  };

  $.fn.plugin1 = function( method ) {    };

})( jQuery );


a

(function( $ ){

  var methods = {
    update : function( content ) { // !!! }
  };

  $.fn.plugin2 = function( method ) {    };

})( jQuery );


tak ve vysledku ztoho bude neco takovehohle

(function( $ ){

  var methods = {
    update : function( content ) { // !!! }
  };

  $.fn.plugin1 = function( method ) {    };
  $.fn.plugin2 = function( method ) {    };

})( jQuery );


kdy "methods" se prepisi a budou obsahem posledniho nacitaneho pluginu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: