<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
> <channel><title>Komentarze do: Projekt aplikacji po stronie klienta</title> <atom:link href="http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/feed/" rel="self" type="application/rss+xml" /><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/</link> <description>Blog programisty/freelancera, w którym znajdziesz przydatne i ciekawe informacje ze świata Web. Poruszane tematyki to przede wszystkim PHP, JavaScript, bazy danych, modelowanie danych i inne. Zapraszam!</description> <lastBuildDate>Sat, 04 Feb 2012 16:02:54 +0000</lastBuildDate> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Autor: Kamil Brenk</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-155</link> <dc:creator>Kamil Brenk</dc:creator> <pubDate>Fri, 06 Aug 2010 20:21:27 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-155</guid> <description>Bezużyteczne i wkurzające, jednak potwierdza, że JavaScript częściowo działa w przeglądarkach mobilnych. Więc gdyby ktoś budował prostą stronę na telefon to mógłby użyć JavaScript, ale nie polecałbym dołączanie biblioteki do jedynie kilkukrotnego wykorzystania metody &lt;i&gt;bind&lt;/i&gt; czy &lt;i&gt;live&lt;/i&gt;.Czasem warto się pomęczyć trochę więcej, napisać prostą obsługę zdarzeń w &quot;czystym&quot; JS i nie katować klienta biblioteką ważącą prawie 50 KB ;&gt;Btw. obsługa zdarzeń jest tutaj przykładem, to tyczy się każdej funkcjonalności. Tak jak jednak napisałeś wcześniej, wszystko z umiarem - jeśli tej funkcjonalności jest za dużo i dochodzi operowanie na modelu DOM czy coś jeszcze to dopiero wtedy warto zastanowić się nad użyciem frameworka :D</description> <content:encoded><![CDATA[<p>Bezużyteczne i wkurzające, jednak potwierdza, że JavaScript częściowo działa w przeglądarkach mobilnych. Więc gdyby ktoś budował prostą stronę na telefon to mógłby użyć JavaScript, ale nie polecałbym dołączanie biblioteki do jedynie kilkukrotnego wykorzystania metody <i>bind</i> czy <i>live</i>.</p><p>Czasem warto się pomęczyć trochę więcej, napisać prostą obsługę zdarzeń w &#8222;czystym&#8221; JS i nie katować klienta biblioteką ważącą prawie 50 KB ;></p><p>Btw. obsługa zdarzeń jest tutaj przykładem, to tyczy się każdej funkcjonalności. Tak jak jednak napisałeś wcześniej, wszystko z umiarem &#8211; jeśli tej funkcjonalności jest za dużo i dochodzi operowanie na modelu DOM czy coś jeszcze to dopiero wtedy warto zastanowić się nad użyciem frameworka :D</p> ]]></content:encoded> </item> <item><title>Autor: eRIZ</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-154</link> <dc:creator>eRIZ</dc:creator> <pubDate>Thu, 05 Aug 2010 22:32:09 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-154</guid> <description>&lt;blockquote&gt;Nie zgodzę się jednak co do telefonów. Opera Mini obsługuje JavaScript, a przynajmniej niewielką część funkcjonalności. Przykładowo: zdarzenie onfocus dodane do pola input zadziała na telefonie, jednak będzie wymagało odświeżenia strony. Jest to dość uporczywe i męczące (dużo serwisów dodaje zdarzenia na polach formularzy, menu rozwijanych), jednak działa.&lt;/blockquote&gt;
Też korzystam z OMini, ale to, co przytoczyłeś, to jest praktycznie... bezużyteczne? ;)</description> <content:encoded><![CDATA[<blockquote><p>Nie zgodzę się jednak co do telefonów. Opera Mini obsługuje JavaScript, a przynajmniej niewielką część funkcjonalności. Przykładowo: zdarzenie onfocus dodane do pola input zadziała na telefonie, jednak będzie wymagało odświeżenia strony. Jest to dość uporczywe i męczące (dużo serwisów dodaje zdarzenia na polach formularzy, menu rozwijanych), jednak działa.</p></blockquote><p>Też korzystam z OMini, ale to, co przytoczyłeś, to jest praktycznie&#8230; bezużyteczne? ;)</p> ]]></content:encoded> </item> <item><title>Autor: Kamil Brenk</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-153</link> <dc:creator>Kamil Brenk</dc:creator> <pubDate>Thu, 05 Aug 2010 19:44:27 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-153</guid> <description>eRIZ, dziękuję za komentarz :-)W zdaniu, które zacytowałeś chodziło mi właśnie o sytuację, gdy potrzebujemy tylko minimalnej obsługi JavaScript, a w związku z tym nie ma co zaprzęgać do tego frameworków. Niektóre rzeczy są stosunkowo proste w wykonaniu i warto zwolnić trochę łącza. Oczywiście w przypadku konieczności zaimplementowania szerszej funkcjonalności w JS to framework jest wręcz niezbędny, by nie wymyślać koła na nowo oraz by skrócić czas pracy.Nie zgodzę się jednak co do telefonów. Opera Mini obsługuje JavaScript, a przynajmniej niewielką część funkcjonalności. Przykładowo: zdarzenie &lt;i&gt;onfocus&lt;/i&gt; dodane do pola &lt;i&gt;input&lt;/i&gt; zadziała na telefonie, jednak będzie wymagało odświeżenia strony. Jest to dość uporczywe i męczące (dużo serwisów dodaje zdarzenia na polach formularzy, menu rozwijanych), jednak działa.</description> <content:encoded><![CDATA[<p>eRIZ, dziękuję za komentarz :-)</p><p>W zdaniu, które zacytowałeś chodziło mi właśnie o sytuację, gdy potrzebujemy tylko minimalnej obsługi JavaScript, a w związku z tym nie ma co zaprzęgać do tego frameworków. Niektóre rzeczy są stosunkowo proste w wykonaniu i warto zwolnić trochę łącza. Oczywiście w przypadku konieczności zaimplementowania szerszej funkcjonalności w JS to framework jest wręcz niezbędny, by nie wymyślać koła na nowo oraz by skrócić czas pracy.</p><p>Nie zgodzę się jednak co do telefonów. Opera Mini obsługuje JavaScript, a przynajmniej niewielką część funkcjonalności. Przykładowo: zdarzenie <i>onfocus</i> dodane do pola <i>input</i> zadziała na telefonie, jednak będzie wymagało odświeżenia strony. Jest to dość uporczywe i męczące (dużo serwisów dodaje zdarzenia na polach formularzy, menu rozwijanych), jednak działa.</p> ]]></content:encoded> </item> <item><title>Autor: eRIZ</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-152</link> <dc:creator>eRIZ</dc:creator> <pubDate>Thu, 05 Aug 2010 17:55:32 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-152</guid> <description>&lt;blockquote&gt;Niemniej jednak nie wszędzie można dawać jquery, czasem lepiej zastosować kilka prostych funkcji. Mowa tutaj chociażby o telefonach – nie ma tam miejsca na cache, a każdy kolejny MB kosztuje (Simplus = 5zł za 50 MB)&lt;/blockquote&gt;
No tak, tylko że komórkowe przeglądarki za bardzo z tego nie skorzystają. ;)Poza tym, popadamy tu w skrajność - zajdzie potrzeba ulepszenia serwisu, to i tak przyjdzie doczepić kolejnego frameworka. Czysty JS owszem, ale do czasu. Jeśli liczba linijek zaczyna przekraczać pewne dopuszczalne maksimum, olewam klepanie koła na nowo.W PHP jest sens nieraz napisania wszystkiego na czysto, bez fw, ale we front-endzie już nie. Chociażby ze względu na różnice w implementacji pewnych funkcji przez przeglądarki.</description> <content:encoded><![CDATA[<blockquote><p>Niemniej jednak nie wszędzie można dawać jquery, czasem lepiej zastosować kilka prostych funkcji. Mowa tutaj chociażby o telefonach – nie ma tam miejsca na cache, a każdy kolejny MB kosztuje (Simplus = 5zł za 50 MB)</p></blockquote><p>No tak, tylko że komórkowe przeglądarki za bardzo z tego nie skorzystają. ;)</p><p>Poza tym, popadamy tu w skrajność &#8211; zajdzie potrzeba ulepszenia serwisu, to i tak przyjdzie doczepić kolejnego frameworka. Czysty JS owszem, ale do czasu. Jeśli liczba linijek zaczyna przekraczać pewne dopuszczalne maksimum, olewam klepanie koła na nowo.</p><p>W PHP jest sens nieraz napisania wszystkiego na czysto, bez fw, ale we front-endzie już nie. Chociażby ze względu na różnice w implementacji pewnych funkcji przez przeglądarki.</p> ]]></content:encoded> </item> <item><title>Autor: Kamil Brenk</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-146</link> <dc:creator>Kamil Brenk</dc:creator> <pubDate>Fri, 30 Jul 2010 09:31:12 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-146</guid> <description>@Tomasz: generalnie się z tym zgodzę, teraz tak wielu developerów używa bibliotek z CDN, że większość użytkowników ma pewnie dany obiekt w buforze (przynajmniej te popularne, jak jquery). A nawet jeśli nie to pobranie pliku z serwerów krawędziowych CDN jest dużo szybsze niż z normalnego serwera.Niemniej jednak nie wszędzie można dawać jquery, czasem lepiej zastosować kilka prostych funkcji. Mowa tutaj chociażby o telefonach - nie ma tam miejsca na cache, a każdy kolejny MB kosztuje (Simplus = 5zł za 50 MB)</description> <content:encoded><![CDATA[<p>@Tomasz: generalnie się z tym zgodzę, teraz tak wielu developerów używa bibliotek z CDN, że większość użytkowników ma pewnie dany obiekt w buforze (przynajmniej te popularne, jak jquery). A nawet jeśli nie to pobranie pliku z serwerów krawędziowych CDN jest dużo szybsze niż z normalnego serwera.</p><p>Niemniej jednak nie wszędzie można dawać jquery, czasem lepiej zastosować kilka prostych funkcji. Mowa tutaj chociażby o telefonach &#8211; nie ma tam miejsca na cache, a każdy kolejny MB kosztuje (Simplus = 5zł za 50 MB)</p> ]]></content:encoded> </item> <item><title>Autor: Tomasz Kowalczyk</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-145</link> <dc:creator>Tomasz Kowalczyk</dc:creator> <pubDate>Fri, 30 Jul 2010 08:46:16 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-145</guid> <description>&quot;Czasem warto poświęcić kilkanaście minut i napisać własną klasę do tworzenia obiektów Ajaksa (XHR), niż specjalnie zaprzęgać do tego jQuery, Prototype i inne wynalazki.&quot;Narzekasz też wcześniej na ilość danych jakie trzeba będzie pobrać - zapomniałeś o jednym - CDN. Umieszczając na stronie linki zamiast do siebie, do serwisów hostujących te pliki masz bardzo dużą szansę, że ktoś wczyta skrypt z cache, a ty masz nieporównywalnie większe możliwości niż w przypadku własnego rozwiązania.</description> <content:encoded><![CDATA[<p>&#8222;Czasem warto poświęcić kilkanaście minut i napisać własną klasę do tworzenia obiektów Ajaksa (XHR), niż specjalnie zaprzęgać do tego jQuery, Prototype i inne wynalazki.&#8221;</p><p>Narzekasz też wcześniej na ilość danych jakie trzeba będzie pobrać &#8211; zapomniałeś o jednym &#8211; CDN. Umieszczając na stronie linki zamiast do siebie, do serwisów hostujących te pliki masz bardzo dużą szansę, że ktoś wczyta skrypt z cache, a ty masz nieporównywalnie większe możliwości niż w przypadku własnego rozwiązania.</p> ]]></content:encoded> </item> <item><title>Autor: Kamil Brenk</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-144</link> <dc:creator>Kamil Brenk</dc:creator> <pubDate>Thu, 29 Jul 2010 23:11:15 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-144</guid> <description>Ale jestem głupi, wcześniej coś mi się pomyliło :D jQuery bowiem posiada metodę do takiego zarządzania zdarzeniami - &lt;a href=&quot;http://api.jquery.com/live/&quot; class=&quot;out&quot; rel=&quot;nofollow&quot;&gt;live&lt;/a&gt;. Jakby tego było mało, czasem używam tej metody i nie jest mi obca.</description> <content:encoded><![CDATA[<p>Ale jestem głupi, wcześniej coś mi się pomyliło :D jQuery bowiem posiada metodę do takiego zarządzania zdarzeniami &#8211; <a href="http://api.jquery.com/live/" class="out" rel="nofollow">live</a>. Jakby tego było mało, czasem używam tej metody i nie jest mi obca.</p> ]]></content:encoded> </item> <item><title>Autor: Michal Wachowski</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-143</link> <dc:creator>Michal Wachowski</dc:creator> <pubDate>Thu, 29 Jul 2010 22:37:44 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-143</guid> <description>No i zapomniał bym o dość ważnym efekcie bombelkowania - dzięki niemu, można sprawdzać czy zdarzenie, wywołane przez dany element pochodzi z danego kontenera czy nie i zależności od wyniku - odpowiednio obsłużyć.Np. w sytuacji gdy mam kilkanaście kontenerów
[cc lang=&quot;html&quot;]&lt;div class=&quot;element&quot;&gt;
....
&lt;a href=&quot;#&quot; rel=&quot;remove&quot;&gt;Usuń&lt;/a&gt;
&lt;/div&gt;[/cc]Przy kliknięciu na link rel=&quot;remove&quot; nie szukam linka wywołującego zdarzenie, a kontenera w którym się znajduje.
No i, obsługę zdarzenia daję na dokument, nie na każdy kontener z osobna :)</description> <content:encoded><![CDATA[<p>No i zapomniał bym o dość ważnym efekcie bombelkowania &#8211; dzięki niemu, można sprawdzać czy zdarzenie, wywołane przez dany element pochodzi z danego kontenera czy nie i zależności od wyniku &#8211; odpowiednio obsłużyć.</p><p>Np. w sytuacji gdy mam kilkanaście kontenerów</p><div class="codecolorer-container html4strict dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;element&quot;</span>&gt;</span><br /> ....<br /> <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#&quot;</span> <span style="color: #000066;">rel</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;remove&quot;</span>&gt;</span>Usuń<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span><br /> <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></div></td></tr></tbody></table></div><p>Przy kliknięciu na link rel=&#8221;remove&#8221; nie szukam linka wywołującego zdarzenie, a kontenera w którym się znajduje.<br /> No i, obsługę zdarzenia daję na dokument, nie na każdy kontener z osobna :)</p> ]]></content:encoded> </item> <item><title>Autor: Michal Wachowski</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-141</link> <dc:creator>Michal Wachowski</dc:creator> <pubDate>Thu, 29 Jul 2010 22:32:23 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-141</guid> <description>W prototype.js nie ma problemu z właśnie takim przechwytywaniem zdarzeń.
Ot po prostu zamiast
[cc lang=&quot;javascript&quot;]$(&#039;id&#039;).observe(&#039;click&#039;&#039;, function(evt) { ... });[/cc]
pisze się
[cc lang=&quot;javascript&quot;]document.observe(&#039;click&#039;, function(evt) { ... });[/cc]Zaś w funkcji reagującej na zdarzenie:
[cc lang=&quot;javascript&quot;]
var target = evt.findElement(&#039;cssSelector&#039;);
if(target) {
evt.stop();
...
}
[/cc]:) Czyżby kolejna przewaga nad jBadziew? :D</description> <content:encoded><![CDATA[<p>W prototype.js nie ma problemu z właśnie takim przechwytywaniem zdarzeń.<br /> Ot po prostu zamiast</p><div class="codecolorer-container javascript dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">observe</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #3366CC;">', function(evt) { ... });</span></div></td></tr></tbody></table></div><p>pisze się</p><div class="codecolorer-container javascript dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">document.<span style="color: #660066;">observe</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> ... <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div><p>Zaś w funkcji reagującej na zdarzenie:</p><div class="codecolorer-container javascript dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> target <span style="color: #339933;">=</span> evt.<span style="color: #660066;">findElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'cssSelector'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br /> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>target<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br /> evt.<span style="color: #000066;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br /> ...<br /> <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div><p>:) Czyżby kolejna przewaga nad jBadziew? :D</p> ]]></content:encoded> </item> <item><title>Autor: Kamil Brenk</title><link>http://blog.kamilbrenk.pl/projekt-aplikacji-po-stronie-klienta/comment-page-1/#comment-140</link> <dc:creator>Kamil Brenk</dc:creator> <pubDate>Thu, 29 Jul 2010 11:20:16 +0000</pubDate> <guid isPermaLink="false">http://blog.kamilbrenk.pl/?p=119#comment-140</guid> <description>@sokzzuka: wiem o czym mowa, jednak w dobie frameworków nie chciałoby mi się pisać mechanizmu do przechwytywania zdarzeń, jestem na to za leniwy.Zamiast tego wolę z wykorzystaniem jQuery przypinać zdarzenia do określonych elementów, wykonywać konkretne akcje, po czym blokować dalsze działania przeglądarki (preventDefault).</description> <content:encoded><![CDATA[<p>@sokzzuka: wiem o czym mowa, jednak w dobie frameworków nie chciałoby mi się pisać mechanizmu do przechwytywania zdarzeń, jestem na to za leniwy.</p><p>Zamiast tego wolę z wykorzystaniem jQuery przypinać zdarzenia do określonych elementów, wykonywać konkretne akcje, po czym blokować dalsze działania przeglądarki (preventDefault).</p> ]]></content:encoded> </item> </channel> </rss>
