Komentáře k článku

Novinky v jQuery 1.4

jQuery je velmi dobře známý, široce používaný a oblíbený JavaScriptový framework. Dnes, tedy 14.1.2010 by měla být uvolněna jeho verze s pořadovým číslem 1.4. Pojďme se proto aktuálně podívat, jaké novinky pro nás jeho tvůrce připravil, a s jakými změnami se budou muset programátoři vypořádat.

Zpět na článek

28 komentářů k článku Novinky v jQuery 1.4:

  1. Honza Marek

    live

    Škoda, že live neumožňuje zavolání funkce nad objektem, který byl právě načten nebo vytvořen. Tak jako je to možné pomocí pluginu livequery.

    1. jtousek

      Re: live

      A toto je možné jak? Tedy o kterou událost jde? Opravdu to není možní pomocí jQuery().live()?

    2. virgee

      podle mne to funguje

      $(„#novyElemen­t“).live(„clic­k“, function(){
      alert(‚hello‘);
      });

      Ja ‚live‘ funkce pouzivam uz nejaky ten patek, a zatim mi to celkem spolehlive fungovalo i pro elementy, ktere na strance pribyly dodatecne. Asi myslite nejakou jinou vlastnost livequery pluginu.

      1. Honza Marek

        Re: podle mne to funguje

        Jasně, tohle je základní vlastnost live eventů :)

        Jde mi o tohle

        $(".novyElement").livequery(function () {
            alert("Je tu nový element");
            $(this).addClass("...");
            ...
        }); 
        1. jtousek

          Re: podle mne to funguje

          Možná je to blbost, ale nespustí se při vytvoření elementu událost onload?
          tedy:
          $(„.novyElemen­t“).live(‚load‘, function () {
          alert(„Je tu nový element“);
          $(this).addClas­s(„…“);

          });

  2. blizzboz

    Re: Novinky v jQuery 1.4

    celú noc som programoval v JS + jQuery a ráno sa pozerám na zdroják aby som si oddýchol a zase vidím článok o jQuery O_o

  3. Michal Augustýn

    Re: Novinky v jQuery 1.4

    Možná by stálo za zmínku, že John Resig dbá na zpětnou kompatibilitu, takže je možné, že přechod z 1.3 na 1.4 bude poměrně bezbolestný…

    1. karf

      Re: Novinky v jQuery 1.4

      Má zkušenost s upgradem mezi desetinkovými verzemi jQuery je přesně opačná. Většinou je to peklo. John Resig sice může dbát na zpětnou kompatibilitu, ale vývojáři pluginů už ne, takže vám jeden hloupě (nebo i chytře) napsanej plugin může rozbít celou aplikaci. Debugovat to není žádná zábava. A je už víceméně pravidlem, že po velké verzi jQuery následuje hned několik opravných verzí. Hodil by se spíš seznam nekompatibilit s předchozími verzemi.

      1. Michal Augustýn

        Re: Novinky v jQuery 1.4

        Hodil by se spíš seznam nekompatibilit s předchozími verzemi.
        Tak jsem to myslel :)

  4. Aichi

    jQuery učí lidi prasit

    Zdá se to jenom mě, že jQuery učí lidi prasáctví? Samá anonymní funkce, pro tvorbu „tříd“ není využíváno objektové vlastnosti Javascriptu – prototype.

    1. Pekelník

      Re: jQuery učí lidi prasit

      jquery učí lidi prasit, php učí lidi prasit, delphi učí lidi prasit, windows učí lidi prasit , ubuntu učí lidi prasit, bla bla bla…

    2. c4tto

      Re: jQuery učí lidi prasit

      Můžete popsat, co je na anonymních funkcích prasáckého? V JS jsou proste funkce first class hodnoty, proto se taky tak používají. Nebo myslíte, že všechna volání funkcí s konstatními parametry by měla napsána tímto způsobem?

      var prvniCislo = 3;
      var druheCislo = 5;
      func(prvniCislo, druheCislo);

      Větší zdroják takto napsaný bych opravdu nechtěl číst.

      Osobně mi v jQuery dost chybí možnost předat jako parametr scope, ve kterém se funkce volá, tak jako to je v ExtJS. To je podle mě opravdová překážka v pohodlném objektovém programování.

      1. Aichi

        Re: jQuery učí lidi prasit

        Tak víceméně jste si odpověděl sám. Anonymní funkce v ovladačích událostí a jako callbacky, tak jak k nim navádí dokumentace zabraňují tomu aby lidi programovali objektově. Je z toho prostě hnusná přezávorkovaná špageta.

        1. Martin Malý

          Re: jQuery učí lidi prasit

          Bez znalosti kontextu (možná to tu už padlo) se jen zeptám: Je nějaký důvod, proč by lidi v JavaScriptu měli „programovat objektově“ a ne „funkcionálně“? Když už teda JavaScript je funkcionální jazyk, a když je „objektovost“ v JS víceméně hackována přes prototypy? Je nějaký důvod nepoužívat přirozený rys jazyka (tedy „přezávorkované špagety“) a lámat je do objektů jen proto, že jsou objekty „IN“?

          1. Daniel Steigerwald

            Re: jQuery učí lidi prasit

            Martine, Javascript je objektový i funkcionální jazyk zároveň. Není ale třídový. Nic jako třída v javascriptu není (i když se to mootools snaží simulovat).
            Mimochodem, Prototype inheritance není hack javascriptu, ale jeho regulérní vlastnost. Slušné knihovny proto taky nedělají nic jiného, než že poskytují pro tuto funkcionalitu sugar methody. Někdy i velmi krátké: http://code.google.com/…goog/base.js?r=2

            Odpověď na tvoji otázku, jestli sem ji pochopil dobře (proč v js nestačí {} a extend) je jednoduchá. Protože objektový model musí být živý. Přidáš-li prototype metodu, dost pravděpodobně chceš, aby ji měli i všechny, třeba již existující, instance. Nebo, rozšíříš-li Base Button např., nechceš znova překopírovat nové metody do všech potomků ručně, nebo snad ano? :)

            1. Daniel Steigerwald

              Re: jQuery učí lidi prasit

              A ještě jedna poznámka. Otázka nestojí jestli funkcionálně, nebo objektově. Pro objektový model se hodí JS prototype, ale jinde zas najde využití funkcionální přístup. Např. closure, nebo předávání funkce referencí. Proto je JS tak flexibilní jazyk.

            2. Martin Malý

              Re: jQuery učí lidi prasit

              Ne, ne, ne, když dovolíš, nepochopils. Reagoval jsem na Aichiho komentář, že „… zabraňuje lidem psát objektově“. A já se ptám, proč by mělo být nutné psát v JS objektově, když „objektové psaní JS“ je tak trošku hack přes prototypy (ne že by byl prototyp hack, tos zase špatně pochopil). Zkrátka jsem se ptal, proč není možné se smířit s tím, že JS je jazyk funkcionální s prototypy a psát podle toho (tedy se závorkama), a proč by „jiné než objektové“ psaní mělo být v JS považováno za „prasení“.

              15. 1. 2010 6:35 redakčně upravil Martin Malý, důvod: Překlep ve jméně komentujícího
              1. Daniel Steigerwald

                Re: jQuery učí lidi prasit

                Tak teď tvé otázce již vůbec nerozumím ;) Definujme si pojmy.

                1) Co si myslíš že je, „objektové psaní“? Příklad kódu prosím.
                2) O jakém hacku přes prototypy stále mluvíš? Máš na mysli to, co sem pastoval?
                3) Co to znamená „psát se závorkama“? Jaké máš na mysli, hranaté, složené, nebo snad kulaté?
                4) Co to je „jiné než objektové“ psaní?

                Dokud si nevyjasníme tyhle čtyři body, tak tvé otázce vůbec nerozumím.

                1. Martin Malý

                  Re: jQuery učí lidi prasit

                  Dej si prosím tu práci a nejprve si přečti, nač jsem reagoval: „Anonymní funkce v ovladačích událostí a jako callbacky, tak jak k nim navádí dokumentace, zabraňují tomu aby lidi programovali objektově. Je z toho prostě hnusná přezávorkovaná špageta.“ Pak si přečti mou otázku a pak odpověz.

                  1. Daniel Steigerwald

                    Re: jQuery učí lidi prasit

                    Ok, tak to zkusím postupně od začátku, abychom neztratili nit.

                    Zdá se to jenom mě, že jQuery učí lidi prasáctví? Samá anonymní funkce, pro tvorbu „tříd“ není využíváno objektové vlastnosti Javascriptu – prototype.

                    Nezdá se ti to, je to tak. Je to důsledek dlouhodobé Resigovi maniakální snahy ušetřit každý možný znak. Není to tak dávno, co prohlašoval, že žádná library nemá mít více jak 20KB. Teď, co má jQuery 23KB, tak snad poleví ;)

                    Ale vážně, ačkoliv interně je prototype pro jQuery objekt použit, do ostatních částí library prosakuje pomaličku. Je to dané historickým vývojem. Když nedržíte stav, nepotřebujete instance, stačí vám statické metody, tedy nepotřebujete prototype. Protože jQuery bylo dlouho pouze příruční DOM udělátko, aby člověk nemusel psát tolik kódu, jediný stav co byl držen, byly elementy vrácené dotazem do dokumentu. Sám Resig se dlouho použití prototype vyhýbal, jeho první příklad na implementaci Class (na blogu) nebyl prostý chyb (a vlastně dodnes je to dost problematický kus kódu)

                    Tedy, jelikož se Resig dlouho vyhýbal použití prototype, dával tím i špatný směr všem uživatelům. A jim to nevadilo, proč taky, na mousehover nějaký objektový model nepotřebujete.

                    Zde musím zmínit, v čem byly (a dodnes částečně jsou) Mootools tak revoluční. Třídy se používají všude. Třeba animace byla od začátku třída (funkce s prototype). Výhodou bylo, že animaci šlo libovolně zastavit, opět spustit atd. Oproti tomu jQuery, první implementace animace stav nedržela. Lehce si jde představit, co se stalo např. při násobném přejetí myšky přes tlačítko (spustilo se x animací, které se přebíjeli navzájem).

                    jQuery přístup není nutně špatný. Ovšem psát jQuery přístupem aplikaci, je cesta do pekel. To je asi ten hlavní rozdíl oproti Mootools. Kdo si přečetl zdroják, a držel se jeho stylu při psaní aplikace, tak jeho kód vypadal 2× lépe, než jQuery, a 5× lépe se udržoval ;)

                    Je nějaký důvod, proč by lidi v JavaScriptu měli „programovat objektově“ a ne „funkcionálně“? 

                    Dva hlavní důvody:
                    1) Funkcionálně v JS prostě neuděláš to, co objektové. Není to tak, nebo tak. Platí, co sem napsal výše. Objektový model musí být živý. Pomocí closure a {} sice namodeluješ lecos, ale živé to nebude.

                    2) Na přemíru použití anonymních funkcí doplatí čistota kódu, který se tak snadno může stát write-only. Platí to, co pro všechny ostatní jazyky. jQuery kód vede ke: http://en.wikipedia.org/wiki/Code_smell
                    Uvedu příklady:
                    Duplicate code, identical or very similar code exists in more than one location: když cpeš všechnu logiku do anonymní inline funkcí, tak ji těžko znovupoužiješ (DRY), jQuery se opakuje stále (i když v poslední době to je lepší)
                    Large method, function, or procedure that has grown too large: Všechny jQuery funkce, které svoje chování přizpůsobí typu předaného argumentu. O tom se dá diskutovat, jestli nejde o trade-off, ale vzhledem k tomu, že to žádná jiná library nedělá.. a mě osobně tahle funkce nikdy nechyběla.. myslím, že je to zbytečné.
                    Large class, a class that has grown too large, see God object: jQuery == God objekt
                    atd..

                    1. dark

                      Re: jQuery učí lidi prasit

                      Výborně napsané. Jde asi i o to, že někteří programátoři vůbec nedokážou překonat hranice. Kdo používal třeba qooxdoo, tak ví, o čem mluvím:)

          2. Aichi

            Re: jQuery učí lidi prasit

            Jak pise pod/nad timto prispevkem Dan, JS je objektovy jazyk a zadny hacky pro objektove psani potreba nejsou.

            Objekty je vhodne pouzivat uz jen pro to, ze v instancich si lepe uchovas stav aplikace, nez v nejakych globalnich vlastnostech, ktere predavas funkcim.

    3. karf

      Re: jQuery učí lidi prasit

      Nevím, jestli jQuery učí lidi prasit, ale určitě se pomocí ní pouští do javascriptu i ti, co normálně neumí programovat. Samozřejmě pak vzniká špagetovej kód. Ale když si vzpomenu, jaké scripty se masově patlaly před jQuery (a obecně před knihovnami tohoto typu), tak to bylo mnohem větší peklo.

      Mně na jQuery ta „neobjektovost“ taky celkem vadí, dneska má hlavně každej pocit, že se všechno musí napsat jako jQuery plugin, i když se to třeba vůbec nehodí.

    4. Karel Minařík

      Re: jQuery učí lidi prasit

      > Zdá se to jenom mě, že jQuery učí lidi prasáctví? Samá anonymní funkce …

      To je zajímavý názor do pranice :) Musím říct, že já sám jsem se docela bránil/bráním u větších věcí použít jQuery a preferuju Prototype/Scrip­taculous ( protože mi víc vyhovuje ten přístup „uděláme si z JavaScriptu Ruby“).

      Ale když se _třeba_ podíváš na http://github.com/…s/quirkey.js, tak to velmi, velmi srozumitelný a dobře napsaný kus kódu. To by v Prototype nebylo nijak „lepší“. (Příkladů jsou jinak tisíce, tenhle mi ale přijde stále docela ilustrativní.)

      Mně osobně teprve potom co jsem si přečetl http://jsninja.com od Johna Resiga došlo, jak to vlastně s jQuery myslel.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3155