Autor Zpráva
Kcko
Profil
Ahoj,
trošku specifická otázka.

Našel jsem si nějaký jakože jQ pattern, který mi celkem vyhovuje.
Demo: jsbin.com/pibejuk/edit?html,output

Jsou tam 2 patterny, druhý funguje OK, u prvního nevím jak to upravit.

Mám problém s tím, jak procpat např. do metody update parametry, tak aby se v inicializaci propsaly.

Jedná se tedy o tento kód

    if (typeof option == 'string') { 
      $plugin[option](); 
    } else { 
      $plugin.init(); 
    } 

A je jasné, že to nemůže fungovat, ale neumím si s tím ted nějak elegantně poradit.

Konstrukce typu mi prostě zlobí.
$plugin[option].apply(this, Array.prototype.slice.call( arguments, 1 ));

Nevěděl by někdo? (@Radek)
Keeehi
Profil
$plugin[option].apply(this, Array.prototype.slice.call( arguments, 1 ));
Je to téměř správně, jen to má dva problémy které jsem označil. Ty jsou způsobené tím, že to celé je zabalené ve funkci, takže se tomu mění kontext. this a arguments se pak týkají té funkce.
this - místo toho tam chceš mít $plugin, protože proměnná $plugin právě obsahu jen objekt, nad kterým to chceš volat
arguments - ještě před tím, než vlezeš to funkce si to uložíš do proměnné a tu si pak uvnitř načteš a použiješ

var data = arguments

return this.each(function() {
    ...
    $plugin[option].apply($plugin, Array.prototype.slice.call( data, 1 ));
    ...

Živá ukázka
Kcko
Profil
Keeehi:
Na vystrčení arguments mimo funkci jsem přišel vzápětí a kontext jsem odhaloval delší dobu - asi hodinu (když jsem ještě objevoval jiné patterny).

Samozřejmě Ti děkuji za ochotu :-), už je mi to jasné, navíc jsem objevil konečně dobře napsaný plugin, kterého se chci držet (myslím Tím patternu)

Jen pro zajímavost (github.com/wbotelhos/raty)
A tento plugin vychází z toho co jsme ted řešili (github.com/wbotelhos/checkall), opět jen pro ukázku, kdyby to někdo řešil nebo to někoho zajímalo.

2 smysluplné patterny jak psát JQ plugin.

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: