Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
"Amúgy leginkább akkor hasznos ha szeretnéd különválasztani a js logikát a HTML kódtól ."
Nyilván, eddig is pontosan ugyanerről beszéltünk, és ez a lényege a JS template-ezésnek...Ez a Handlebars sem rossz, mondjuk első ránézésre őszintén szólva számomra a beépített .template() még egyértelműbbnek tűnt.
De mivel hosszabb távon nincs tapasztalatom egyikkel sem, így érdemben nem tudok róluk nyilatkozni, hogy melyik jobb vagy rosszabb.
Nektek van személyes tapasztalatotok ezekkel?
(Karma, gondolom ezek szerint Te már a gyakorlatban is használtad az EJS-t.)Sk8erPeter
-
Sk8erPeter
nagyúr
"This feature and its documentation are in beta and subject to change before final release."
De ebben nincs benne, hogy már nem is fejlesztik tovább!Basszus, mindig rácsodálkozom, még JS-ből is mennyit lehetne és kellene fejlődni. A JavaScriptMVC-t sem volt még alkalmam kipróbálni, pedig rohadtul kéne. Inkább szopattam magam durván komplex kódok írásával.
De ez most eléggé felkeltette az érdeklődésemet.
A JavaScriptMVC-be gyorsan beletanultál?Tök más tészta, de Ext JS-t Ti már használtatok?
Sk8erPeter
-
Sk8erPeter
nagyúr
Tényleg, igazad van, a plugin külön oldalát nem néztem!
Na, a mobilos fejlesztés része nem lehetett egy egyszerű meló.+ martonx: köszi a választ mindkettőtöknek!
Ha végre lesz egy kis felszabadítható időm, megpróbálok belekóstolni mindháromba (nem összefüggő a felsorolás): JavaScriptMVC, KnockoutJS, ExtJS.
Egyelőre nehéz belelátni így távolról, hogy milyen mértékben gyorsítaná meg a munkámat kliensoldali fejlesztés terén. Mondjuk gondolom azért nem olyan durva mértékű a beleölendő munkaórák számának csökkenése, mint amikor mondjuk én PHP-kódolásnál a kód 0-ról történő megírása, egyfajta saját keretrendszer írogatása-csiszolgatása helyett egyszer csak rájöttem, hogy minek szopatom magam ezzel, amikor nagyon faszán lehet pl. Drupalt vagy más meglévő keretrendszert használni - a Drupalhoz meg még nagyon profi modulok is készülnek, plusz a saját modulírás is rohadt gyorsan megy jó kis beletanulási idő után.ExtJS UI-része tényleg nagyon durván széleskörű, igazából elvileg pont ez a lényege - a jQuery UI ehhez képest tényleg nevetséges, viszont az legalább - szerintem - totál egyértelmű, könnyű a használata, a hivatalos honlapon fent lévő példák alapján nagyjából kb. átlagban 30 perc lelesni a metódusokat, azok használatát, és megnézni a doksit az összes elérhető eseményre és property-re - a néha fellépő bugok javítása már más kérdés.
Aztán bárcsak lenne még időm arra is, hogy érdemben tudjam már összehasonlítani a jQuery-t pl. a MooTools-szal vagy Dojo-val...
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Brown ügynök #454 üzenetére
Nem, én most kifejezetten keretrendszerre gondoltam, mint a Kohana vagy ehhez hasonló, ha NEM CMS-ről (tartalomkezelő rendszerről) van szó, csak rossz volt a megfogalmazás módja. Arra gondoltam, hogy CMS-ek közül Drupalt használok, mást egyelőre nem, mert ez nagyon bevált; ezentúl alternatív mód a fejlesztésre a keretrendszerek használata, de az nem összekattintgatós.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Brown ügynök #456 üzenetére
Egyébként teljesen igazad van, elolvastam még egyszer, amit írtam, és tényleg úgy lehet érteni, szóval jó hülyén fogalmaztam, sorry.
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #460 üzenetére
A click eseményen belül miért kötsz újabb mouseup, mousedown eseményekre függvényhívásokat? Igazából ennek logikátlanságára próbálta felhívni a figyelmedet Karma is.
Tehát tulajdonképpen itt azt csinálod, hogy amint megtörténik a click() esemény, akkor újból és újból újabb eventeket kötsz rá az adott elemre, totálisan feleslegesen.
Akkor döntsd el, melyik eseményre akarsz feliratkozni, mivel.
Simán ki lehetne ebből hagyni a click()-et is, persze most kérdés, mi a pontos célod, olyan nagyon nem gondolkoztam el a függvényeiden, de az látszik, amit a kolléga mondott, hogy mindig újabb eseményeket kötsz az elemre.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #463 üzenetére
Van mód arra is, hogy az egér mozgását kövesse a kamera, itt egy srác felrakott egy demót is az egérmozgatás irányának detektálására: [link].
Itt pedig arra mutat demót egy másik emberke, hogy hogyan tudod detektálni a mouseup, mousedown, mousemove eseményeket: [link]
Egyébként úgy látom, attól szeretnéd függővé tenni a kamera mozgását, hogy a felhasználó meddig tartja lenyomva az adott gombot - tehát amíg nyomja, addig mozogjon az adott irányba.
Ebben az esetben meg mindig hozzá kell adogatni az adott pozícióhoz egy bizonyos mennyiséget, amennyivel a koordinátákat egy lenyomásra szeretnéd arrébb mozgatni - aztán persze tovább lehetne fejleszteni úgy is, hogy mondjuk egy idő után a mozgás gyorsuljon, stb. -, és találtam egy mousehold() eventet létrehozó plugint is: [link]. Ez azért lehet hasznos, mert mondjuk itt elég átadnod a függvényt, amit szeretnél addig ismétlődően végrehajtani, amíg tart a gomb nyomva tartása. Ezzel végül is megspórolod, hogy külön-külön kelljen kezelned a mousedown, mouseup eseményeket, ez elintézi, végül is ennek az összevont kezelése a dolga a pluginnek.Sk8erPeter
-
Sk8erPeter
nagyúr
"A <>-ök a selectorba minek? Egyáltalán ez így működik? Ha véletlenül működik is, szedd ki őket onnan."
Persze, hogyne működne, és önmagában nem helytelen a használata, mivel ezzel létrehozol egy DOM-elemet.
Hivatalos doksi:
Creating New Elements"[...] if the string appears to be an HTML snippet, jQuery attempts to create new DOM elements as described by the HTML. Then a jQuery object is created and returned that refers to these elements. You can perform any of the usual jQuery methods on this object:
$('<p id="test">My <em>new</em> text</p>').appendTo('body');
"
Komplikáltabb példa:
$("<div/>", {
"class": "test",
text: "Click me!",
click: function(){
$(this).toggleClass("test");
}
}).appendTo("body");Kisebb feladatokra nem feltétlenül éri meg külső template-eket használni.
Hacsak nem beépített megoldásról van szó, mint pl. ez: [link].==
(#472) Karma : há' má' megin' megelőzté'.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Brown ügynök #469 üzenetére
"A "name" cella helyett [object Object] rak be ami nem túl elegáns."
Változtasd meg a "name" változónevet, pl. personName-re vagy valami egyedibbre. A "name" valami foglalt név, most hirtelen nem vágom, mire.
Mindenesetre megváltoztatva a nevet már jó lesz.
Gondolom ugyanez vonatkozik a második kérdésedre is.Szerk.: meg is van a válasz, hogy miért foglalt a "name" (ez előbb nem jutott eszembe):
[link]
"name is a property of the window object."
>>> [link], [link]"The name of the window is used primarily for setting targets for hyperlinks and forms. Windows do not need to have names."
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Szerintem ilyen esetben egyáltalán nem felesleges, pont az általam imént mutatott példa miatt:
$("<div/>", {
"class": "test",
text: "Click me!",
click: function(){
$(this).toggleClass("test");
}
}).appendTo("body");Cél és megközelítés kérdése, de ha pl. konkrétan egy elemre szeretnél vonatkoztatni bizonyos tulajdonságokat, akkor a fentebb írt módon sokkal áttekinthetőbb, mit is csinálsz, és könnyebben is módosítható egyéb célokra, mintha mondjuk ezt írnád:
$('body').append('<div onclick="$(this).toggleClass("test");" class="test">Click me</div>');
VAGY
$('body').append('<div class="test">Click me</div>');
$('.test').click( function(){ $(this).toggleClass("test"); } );Szerintem legalábbis szétszedve egyből látszik, hogy az adott elemre vonatkoztatva mit szeretnél csinálni.
Ez a "stringbe passzírozzunk bele mindent" kicsit rondábbnak tűnik.Tulajdonképpen nem látom be, miért gondolod, hogy a fenti használat a jQuery "erőltetése", szerintem ez sokkal inkább a képességeinek a kihasználása az áttekinthető kód érdekében.
================
(#475) Brown ügynök : szívesen.
(#479) Brown ügynök : ja, ezzel egyetértek, tulajdonképpen pont én is ezt fejtettem ki fentebb.
(#478) Karma : na ja, ez is jogos. De szerintem a teljesen általános jellegű nevek helyett érdemes már a változónévben is jelezni, hogy milyen célra is lesz pontosan használva. Így más is gyorsabban átláthatja a kódot, meg Te is egyből tudod, mit is akartál vele.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
"Ha kicsi a feladat, az átláthatóság édes mindegy."
Nem értek egyet. Miért kellene valamit összeb@szni attól még, mert röviden is megoldható? Egy feladat bármikor bővülhet is, lehet, hogy csak szép lassan terpeszkedik elég nagyra, és ha mindenféle összegányolt hányadék van benne, akkor feleslegesen nehezen követhető lesz egy idő után.Amúgy soha nincs "egyetlen jó megoldás".
Sk8erPeter
-
Sk8erPeter
nagyúr
3 dolog:
1.) egy kicsit rövidebben, a minimálisra redukálva a tök felesleges infók mennyiségét: mit is szeretnél? Már nem volt agyam az egészen átrágni magam, mert annyira hosszú volt (meg mert annyira késő van, és ilyenkor a francnak sincs kedve novelláskötetekbe illő hsz.-eket olvasni ).
Tehát: van két meződ, egy az érkezési dátumnak, másik a távozási dátumnak.
Miután kiválasztottad az érkezési dátumot, akkor automatikusan választódjon ki a távozási dátum úgy, hogy az érkezési dátumhoz képest hozzáad mondjuk egy hetet?2.) Ne akarj semmit frissítgetni window.location.reloaddal és hasonlókkal, mert akkor előtte valamilyen módon a már kiválasztott értékeket el kéne mentegetned, majd az oldal-újratöltés után ezeket előkotorni, stb... felesleges.
3.) Légy olyan jó, és pakold fel az eddigi példakódjaidat jsfiddle-re: [jsfiddle.net]. Itt be tudod húzni a jQuery UI-t is úgy, hogy előbb bal oldalt kiválasztod valamelyik jQuery-könyvtárat, aztán bepipálod, hogy rakja már hozzá a UI-t is.
Egy egyszerű példakódot írj ide, hogy ne nekünk kelljen ennek a megírásával tökölni.
Ha ez megvan, akkor ezerszer egyszerűbb lesz közös nevezőre jutni, és gyorsabban megkapod a megoldást.Sk8erPeter
-
Sk8erPeter
nagyúr
Mi sem egyszerűbb! Elkészítettem neked, szerintem jól látható, mit is kell csinálni, és működik: [http://jsfiddle.net/wfgTu/1/].
A másik Datepickernek egyszerűen beállítottam a minDate opcióját úgy, hogy kiszedtem az érkezési dátumból a megfelelő értéket. Szerencsére nagyon könnyen kezelhető, nem kell külön parse-olgatni (elintézi magának), elég volt ennyi:$("#arrival_date").datepicker({
dateFormat: 'yy.mm.dd',
minDate: 0,
maxDate: "+2Y",
onSelect: function(dateText, inst) {
var selected_arrival_date = $(this).val();
$('#selected_date_arrival').html( selected_arrival_date );
$("#departure_date").datepicker( "option", "minDate", selected_arrival_date );
}
});Ja, a magyar nyelvű változóneveket és markupokat kiszedtem, mert szerintem nem jó szokás a használatuk.
Szerk.: most látom, hogy azt is szeretnéd kezelni, ha valaki a távozási dátumot választja előbb - még belefértem a szerkesztési időbe >> itt az is kezelve van: [http://jsfiddle.net/wfgTu/2/].
============
(#488) Cathfaern : kösz az értelmezést, egy mondatban elég jól összefoglaltad a lényeget.
(#489) martonx : Cathfaern már írta, de azt használ, amúgy ott is van alul az a mondat, hogy "A plugin-nal kapcsolatos további információkat (pl. események, metódusok) a datepicker oldalán találsz."
Végül is az kifejezetten jó, hogy van magyar nyelvű magyarázat is hozzá, jó a kezdeményezés.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Brown ügynök #498 üzenetére
Nem ártana látni a teljes kódot, hogy ezek a változók egyáltalán honnan jönnek.
Pl. van a create függvény:create : function () {
var access;
access = this.get_upload_rights(obj);
......
};Itt az "obj" nevű változót (objektumot) mégis honnan kapja? Honnan kéne annak ismertnek lennie? Lehet, hogy egyszerűen undefined-ot ad át ebben a formában a get_upload_rights függvénynek...
Meg azt én sem értem, hogy a get_upload_rights-ban a $obj már megint honnan jön, amikor elvileg csak az "obj" nevű változó lenne ismert, ha átadnád a függvénynek egyáltalán.
De ugye nem látjuk, hogy vannak-e mondjuk ilyen nevű globális változók...Sk8erPeter
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz Speeedfire #511 üzenetére
Szerintem ez nem olyan fura.
Végül is ez egy keretrendszer...Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #513 üzenetére
Ja, nem tűnik rossznak.
Amúgy nem olyan meglepő, JS-fájlok behúzására Drupalban is van mód: [link], [link], stb.Sk8erPeter
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz Speeedfire #517 üzenetére
Ha senki nem kérne segítséget vagy tapasztalat-megosztást, kihalnának a fórumok. Mondjuk akkor is, ha mindenki csak segítséget kérne.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #520 üzenetére
Látom szereted túlbonyolítani a dolgokat.
Itt egy lehetséges megoldás: [link].
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #525 üzenetére
Te miről beszélsz?
Talán ha érthetően fogalmaznád meg a kérdéseidet....
Akkor komolyan nem értem, mit akarsz. Főleg, hogy mégis mi nem felel meg neked azon a megoldáson, amit mutattam.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #527 üzenetére
Remélem ez már számodra is elég általános:
http://jsfiddle.net/hYRDs/7/
(a markupot is klónozza, egyedül azzal nem foglalkoztam, hogy itt a törlésre szolgáló X ikon pozíciója elcsúszik)Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #531 üzenetére
Aha, csak kár, hogy még az egyik legalapvetőbb funkció, a törlés sem működik a kódodban...
Meg egyébként én nem sok hasonlóságot vélek felfedezni a kettő között.
Ilyenek nálam nincsenek: $(this).parent().children('.row:first') - ebben eleve felesleges logikai csavar van - ha te az adott elem közvetlen szülőjének "közvetlen" gyermekét keresed, akkor magyarul a testvérelemére vagy kíváncsi. Ilyen nálam pl. úgy van megoldva, hogy a klónozó "gomb" előtti közvetlen elemet klónozom, egy egyszerű .prev() hívással - úgy tűnt, pont ez a célod. A .closest() nyomatása meg itt szerintem szintén nem egy túl biztonságos és általános megoldás - honnan tudod, hogy mondjuk közben máshonnan nem szúrsz be egy elemet. Nálam a kerülő megoldás erre az, hogy a törlésre szolgáló "gomb" eleve a törlendő elem egyik gyerekeleme, így azt nagyobb eséllyel találom el, hogy mi is a cél.Azért annak külön örülök, hogy ezek szerint feleslegesen csesztem el az időt, hogy összehozzak neked valami átlátható és viszonylag általános jellegű kódot... (Mondjuk arra is figyeltem, hogy azért a felülete emberi szemmel értelmezhető legyen, hogy milyen célt is szolgál (lásd pl. ikonok).)
Annyiból mondjuk mindenképp tanulságos az ilyen eset, hogy az ember feleslegesen ne áldozzon a drága idejéből másra, mert lehet, hogy a semmiért szarakodik és kódolgat a nagy segítő szándékával.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #533 üzenetére
Működik Firefoxban (11.0).
De akkor próbáld ki Operában (11.61), IE8-ban, Chrome-ban (18.0), b@szik működni. Elég meggyőző?
Legalábbis a jsFiddle-ön fent lévő kód ezekben a böngészőkben nem megy.
Localhoston vagy máshol nem próbáltam.Az enyémet mindegyikben próbáltam, mindegyikben működik (jsFiddle felületén is).
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #535 üzenetére
Ezt tényleg nem értem, tegnap hiába kattyogtam a del-re, nem ment. Most nyomattam egy újraindítást, és oké. Na most hirtelen erre nem vágom a magyarázatot, de lehet, hogy a túl sok fül volt az oka (mondjuk akkor miért ment az enyém?).
Mindegy, lényeg, hogy végül is úgy tűnik, ez is működőképes, szóval bocs, ezek szerint tévesen mondtam, hogy nem megy a törlés. A fenti szempontok viszont szerintem állnak. (Az elfogultság a saját kódommal szemben. )Szerk.: bár itt már korábban volt szó róla, a .live() már régóta deprecated. Az .on() viszont nem, 1.7-től felfelé az az ajánlott.
Szóval nekem is a .delegate() helyett az .on()-nal kellett volna csinálnom, de tegnap az sem ment valami fentebbihez hasonló megmagyarázhatatlan okból (nem vágom), ezért az enyémet is javítottam:
http://jsfiddle.net/hYRDs/8/[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #538 üzenetére
Aha, javítottam .on()-ra, csak rosszul.
Itt a jól működő változat .on()-nal:
http://jsfiddle.net/Sk8erPeter/RqYYj/Közben rájöttem, hogy miért nem működött, azért, mert előtte így csináltam:
$(".del.enabled").on("click", function(event) {
var $parent = $(this).parent();
$parent.remove();
return false;
});HELYETTE ez a jó:
$("body").on("click", ".del.enabled", function(event) {
var $parent = $(this).parent();
$parent.remove();
return false;
});
VAGY MÉG JOBB (http://jsfiddle.net/Sk8erPeter/RqYYj/1/):
$(".stuffs_wrapper").on("click", ".del.enabled", function(event) {
var $parent = $(this).parent();
$parent.remove();
return false;
});Utóbbinál kevesebbet kell rohangászni a DOM-fában.
A magyarázata, amiért így kell megoldani:
.on() hivatalos doksi:"Note that .on() allows a click event on any paragraph--even new ones--since the event is handled by the ever-present body element after it bubbles to there."
A $(".del.enabled") selector pedig nincs mindig jelen a DOM-ban, pont ez fog a jövőben létrejönni, a gombnyomás hatására.
Legalábbis gondolom, hogy így magyarázható, de javítson ki valaki, ha ez ebben a formában pontatlan.
DE azt magyarázza már el valaki plíz, hogy ugyanez miért működik .live()-val:
http://jsfiddle.net/Sk8erPeter/RqYYj/2/============================================
Szerk.:
(#539) Karma :
igen, megelőztél, mert közben jó hosszan megírtam ezt a hsz.-t...
Inkább a fentire találj nekem magyarázatot, hogy miért működik pontosan ugyanez a régi öreg .live()-val![ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Na basszus, erre magamtól is rájöhettem volna hülyeségek kérdezgetése előtt.
Köszi!
Akkor viszont egyértelmű, hogy a delegate-nél meg on-nál jellemző selectorra való szűkíthetőség teljesítmény szempontjából sokkal jobb lehet, mint az, ami a .live()-nál jellemző, hogy az egész documentre kötjük rá (hatalmas dokumentumnál gondolom jól kijöhet a különbség bencsmárkokkal).===
Amúgy nem tudom, észrevettétek-e, de a jQuery oldala nagyon sokszor szarakodik mostanában, van, hogy egyszerűen nem érhető el a szerver. Előbb megint meg akartam nézni a doksit, és az oldal már megint behalt.
Most megnéztem cache-ből, ott tényleg látszik, amit írtál (korábban már én is kimásoltam ezt a részt, nem tudom, most miért voltam olyan agyatlan, hogy ezt elfelejtettem ):"Rewriting the .live() method in terms of its successors is straightforward; these are templates for equivalent calls for all three event attachment methods:
$(selector).live(events, data, handler); // jQuery 1.3+
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+
$(document).on(events, selector, data, handler); // jQuery 1.7+"Én azért kitettem az idézőjeleket, nem úgy, mint - most már - egykori köztársasági elnökünk.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Hátha másnak is hasznos lesz, akinek nincs kedve kézzel hekkelgetni a file típusú input kinézetét: File Style Plugin
Készítettem róla jsFiddle-demót: http://jsfiddle.net/Sk8erPeter/JEVgF/.Sk8erPeter
-
Sk8erPeter
nagyúr
Meg mondjuk az sem ártana, ha az ('#egy') és a ('#ketto') ELŐTT lenne egy dollárjel, vagy egy jQuery kulcsszó...
Érdekes, most jsFiddle-ben én sem tudok & jelet írni, csak ha máshova írom, aztán bemásolom oda...Egyébként igen, működik a dolog, csak az egy igen nagy hátránya, hogy előbb ki kell töltened mindkettőt, majd nem keyupra reagál, hanem újból bele kell kattintanod a div-be, hogy végül az "extra" megjelenjen...
Itt a "működő": [link].
Sk8erPeter
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
Őszintén szólva nem nagyon értem, mi ebben a meglepő.
Az is működik, ha az .on()-nal oldod meg (!!), és arra kötöd rá, és az is működik, ha a callback-be beteszel akár egy eleve létező függvényt, ami végrehajtja azt a feladatot, hogy felülírja a text típusú input fieldek felülírását. Ezen a függvényen belül meg a biztonság kedvéért nyilván nem árt ellenőrizni, hogy a DOM-ban van-e már egyáltalán az elem.Amúgy még úgy emlékszem, trükközéssel az is működik, hogy mondjuk ezt csinálod, hogy nem adod hozzá a látható elemekhez, hanem ilyet alkalmazol (de most nem próbáltam, csak úgy rémlik, lehet ezt a trükköt alkalmazni, és már csináltam is):
$.post(url, { params }, function (data) {
var $myStuff = $(data);
$myStuff.find('form :input').each(function () {
//ide jöhet a manipuláló kód
});
$myStuff.appendTo('#detail');
});De mondom, ez utóbbira nem adnám a nyakam, hogy pontosan így működik, de hasonló módszer tuti van rá. Azért ezt is kipróbálhatod, ha gondolod (csak az érdekesség kedvéért).
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #530 üzenetére
A korábbi példánál egy tömbös megoldás szerveroldalon praktikusabb (name-nél szögletes zárójelek ([])):
http://jsfiddle.net/Sk8erPeter/RqYYj/Formelemek klónozására ez is egész használhatónak tűnik:
SheepIt!Csak a teljesség kedvéért jsFiddle demo az oldal alapján (basic demo):
http://jsfiddle.net/Sk8erPeter/33n9Y/[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #574 üzenetére
Az ilyen mondjuk néha nem túl kellemes.
Az OTP honlapjánál van ugyanilyen fícsör jobb oldalt, az OTPDirektbe való bejelentkezésnél, eleinte zavart, hogy alapból mindig nyomok egy Tabot az inputok kitöltése után, de ez megteszi helyettem is, így volt, hogy pont átugrottam a köv. mezőt. Mondjuk azóta megszoktam, de eleinte szar volt.(#573) v2izzy :
Mi az oka annak, hogy a function előtt van egy felkiáltójel?
így:
!function($)(#568) martonx :
valóban jónak tűnik, még tapasztalatom nincs vele, kis pubi vagyok még...
Majd erre is sort kerítek.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Milyen hátrányai vannak? Csak érdeklődésképp.
"Viszont biztos vagyok benne, hogy mint a jquery 1-2 évvel ezelőtt, a knockoutjs hamarosan berobban a webalkalmazás fejlesztés világába, és "villám gyorsan" kvázi standard lesz."
Azért ez szerintem bátor előrejelzés. Szóval szerinted KnockOuttal győz a jQuery ellen?
A jQuery ma már olyan szinten népszerű, hogy azért nem lesz egyszerű kiütni.
Mondjuk az előbb linkelt cikk épp így kezdi: "Knockout is not meant to be a replacement for jQuery". (Még nem olvastam el a teljes cikket, de kíváncsi vagyok rá.)Számomra ez is új infó:
"In the red corner, weighing in at just 29Kb (uncompressed), is knockout.js; a pure JavaScript library that simplifies the creation of dynamic user interfaces. Knockout is library agnostic, so it can easily be used with any of the most popular JavaScript libraries already available, but it works particularly well with jQuery, and uses jQuery.tmpl as its default templating engine."Az utóbbi kiemelt mondat meglepett, mert ahogy korábban tárgyaltuk itt a topicban, azért a jQuery beépített template-ezőjét nem fejlesztik már, így az elavult lehet.
Na, de a lényeg, hogy ezek szerint nem a jQuery kiváltását hivatott szolgálni a KnockOutJS.De én csak a cikkből indulok ki, tapasztalatom nincs e téren, szóval nyugodtan cáfolhatod, ha úgy érzed.
===
"lassan a mobilokban is minimum 1Ghz-s procik figyelnek"
Milyen jó, hogy nemsokára egyedül leszek vele, hogy nekem még mindig egy ócska fos butafonom van.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #578 üzenetére
Nekem egy, a tapiképernyő miatt magát okosnak mutatni akaró, de valójában elképesztő ostoba egy fos KP500-am van. Nem ajánlanám senkinek, de azért a lényegi funkciót ellátja, telefonálni lehet vele.
Sk8erPeter
-
Sk8erPeter
nagyúr
Őszintén szólva a kódját olyan nagyon nem tanulmányoztam át.
Most viszont belenéztem, mert elkezdett érdekelni, miért oly elegáns.Van egy ilyen példa, csak kiragadva a HTML-részt:
<form data-bind="submit: addTask">
Add task: <input data-bind="value: newTaskText" placeholder="What needs to be done?" />
<button type="submit">Add</button>
</form>
<ul data-bind="foreach: tasks, visible: tasks().length > 0">
<li>
<input type="checkbox" data-bind="checked: isDone" />
<input data-bind="value: title, disable: isDone" />
<a href="#" data-bind="click: $parent.removeTask">Delete</a>
</li>
</ul>
You have <b data-bind="text: incompleteTasks().length"> </b> incomplete task(s)
<span data-bind="visible: incompleteTasks().length == 0"> - it's beer time!</span>Valahogy számomra ez kevésbé tartozik az elegáns kategóriába, hogy igazából minden elemhez tartozó kliensoldali adat bele van égetve data-binddal az elemek attribútumába.
Tudom, találjak ki jobbat.
De ez nekem akkor is szemantikai keveredés, mint amikor valaki mondjuk telerakja a jQuery-kódját CSS-módosítgatásokkal meg HTML-elemekkel, az is kerülendő, mert a jó gyakorlat a különböző nyelvek lehetőleg teljes szétválasztása.
Na ezt nem kicsit rúgja fel a fenti kód készítője - de persze azt is elfogadom, hogy nem egyszerű általános jellegű kódot írni ilyen célra.
Meg gondolom létezik szebb módszer, amit el lehet érni KnockOut JS-sel is, ennek még nem néztem utána.
De majd holnap jobban megkukkantom a többi példát is, ha lesz rá időm.Amúgy kíváncsiságból, milyen jellegű alkalmazásnál szoktál ilyen durva mértékű kliensoldali kódot alkalmazni? Pl. gridek gyártogatására, stb.
Általában inkább admin-felületekhez? Vagy egyéb, "nem átlagos" webalkalmazásokra?
Pl. mittudomén, cégek adott éves forgalmi adatainak és egyebeknek a kliensoldali megjelenítésére?Sk8erPeter
-
Sk8erPeter
nagyúr
Köszi a linket, na igen, ott választ is adnak, hogy miért is nem alkalmaztam ezt soha még:
a more readable way of writing it would be this:
(function(){})();Például Drupalban is ez a használati mód a standard:
Drupal 7 - Using jQuery"Using jQuery
jQuery is now namespaced to avoid conflicts with other Javascript libraries such as Prototype. All your code that expects to use jQuery as $ should be wrapped in an outer context like so.
(function ($) {
// All your code here
})(jQuery);If you don't, you may see the error
Uncaught TypeError: Property '$' of object [object DOMWindow] is not a function
or similar."A másik linken bővebben elmagyarázzák a használatának okát (amivel mondjuk feltételezem, Te nyilván tisztában vagy, de másnak érdekes lehet).
Mindenkinek (ha már ezt a fentit belinkeltem):
itt egy érdekes olvasmány a JavaScript-kódok moduláris felépítését elősegítő tervezési mintáról, amire a Drupal 7 is épül (már a 6-os is épített rá, de a 7-esnél ez még inkább jellemző, és felfelé is megmarad ez a tendencia), ajánlom olvasásra:JavaScript Module Pattern: In-Depth.
Nagy előnye, hogy így az egyes modulok a többi által beállított értékeket, viselkedést, stb. is felül tudják bírálni - ahogy benne is van a nevében, moduláris, tehát az egyes jól elkülöníthető egységeket hozzá tudjuk kapcsolni a meglévő rendszerünkhöz, vagy épp le tudjuk választani róla. Jobb esetben ez nem is okoz semmiféle problémát a korábbi rendszer működésében, csak megváltoztatja azt.
Annak, aki Drupalhoz fejleszt, kötelező olvasmány.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Hátha valakinek szüksége van az egyes billentyűk kódjára, a hozzájuk tartozó események figyelésére, erről készítettem jsFiddle-demót:
http://jsfiddle.net/Sk8erPeter/EAjYe/Sk8erPeter
-
Sk8erPeter
nagyúr
Na igen, ott eléggé kell a táblázatszerű megjelenítés.
Itt mondjuk elég durván kell "extra taggelni", nem csak "bizonyos mértékben", ahogy elnézem, lényegében az "idézett" rész egy az egyben erre épül.
Mondjuk biztos lehetne alternatív szintaktikát kiagyalni rá, de valószínűleg így a legegyszerűbb, és durván nagymennyiségű adatnál meg a lényeg, hogy azért visszakövethető legyen, és tulajdonképpen nem olyan csúf, hogy ne lehetne megbocsátani, hogy tele van szórva szemantikai keveredést is jelentő kódokkal.============================================
Más:
Ha valakinek jsFiddle-ről másolási problémája akad, tehát "Unexpected token ILLEGAL"-jellegű hibaüzenetet kap, akkor az okát a másik topicban már kitárgyaltuk, konkrétan: [link], [link].
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #594 üzenetére
Mi az a "date"? Nem "data"-nak kéne ott lennie?
Eszerint igen: [link]...Sk8erPeter
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
this.$('thumb-nav-right')
Ennek így semmi értelme.Most gyorsan rákeresve találtam egy kész jsFiddle-példát a Galleria demójára, így nekem azt csak át kellett alakítanom, így működik az egérfölévivős a leggyorsabban lekódolható módszerrel, ilyen a végeredmény:
http://jsfiddle.net/Sk8erPeter/wHEmv/
Igazából ez a nagy mágia:
var hoverInterval;
$('.galleria-image-nav-right').hover(
function() {
// call gallery.next() every 600 milliseconds
hoverInterval = setInterval(function() {
gallery.next();
}, 600);
}, function() {
// stop calling doStuff
clearInterval(hoverInterval);
});
$('.galleria-image-nav-left').hover(
function() {
// call gallery.prev() every 600 milliseconds
hoverInterval = setInterval(function() {
gallery.prev();
}, 600);
}, function() {
// stop calling doStuff
clearInterval(hoverInterval);
});Persze ezt a ready-be rakd, és legyen meg a gallery változó, úgy, ahogy a példában is van.
A képváltás sebességét tetszőlegesen állíthatod, a 600 ms gondolom kicsit túl gyors, azért állítottam ennyire, hogy látható legyen, mi történik.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #609 üzenetére
"Köszi, a js jobban tettszik"
Kár, hogy így felesleges erőforrásokat emésztesz fel. De tényleg totálisan feleslegesen, amikor v2izzy megoldása tökéletes.
Amúgy "tetszik". (csak mert észrevettem, hogy következetesen rosszul írod ezt a szót )Ha akarsz más funkciót is, akkor használd, de akkor is inkább a hovert szerintem.
Most olvastam csak el, ami a képen van.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Hát a thumbnailnél most nem is láttam túl sok értelmét, mivel az tök függetlenül mozog a képtől.....
"Most éppen arra próbálok nevelni, hogy az email-ek aljára írjuk a választ, nem a tetejére, de teljesen kilátástalan."
Ez hogy jön az IE hülyeségéhez? Az IE-nél nem fér ahhoz kétség, hogy egy rakás szar, viszont hogy ki hova írja a saját levelezőkliensében a választ, megint más kérdés.
Én Gmailt használok, alapértelmezett az volt, hogy föntre került a válasz, és bár ezt át lehet állítani, én nem tettem, így megszokásból én is a tetejére írom a választ. Érdekes módon teljesen jól visszakövethetőnek tartom. Ahogy azt is, ha valaki alulra írja a választ - DE ennek megvan az az igen nagy hátránya, hogy előfordul, hogy valaki új levélszálat indít feleslegesen egy korábbi témához, így a korábbi idézetek nem feltétlenül lesznek összecsukva még egy Gmail-szintű kliensnél sem, én viszont azt nem szívesen tekerem végig.
Na meg gondolj bele, mi van, ha valaki régi email-klienst használ. Fater például megszokásból még mindig Outlook Express-t használ a privát célú leveleire, ami meg nem igazán támogatja a szálakba rendezést. (Mondtam már, hogy álljon át Gmailre, de nem találta kényelmesnek és áttekinthetőnek, ez van. Ezzel nyilván nincs egyedül.) Na ő tekerjen végig minden levelet?
Ez szerintem ilyen felesleges hitkérdés, amiben felesleges megpróbálni bárkit is megtéríteni, úgyis az egyéni preferenciája lesz a döntő.Sk8erPeter
-
Sk8erPeter
nagyúr
válasz Speeedfire #611 üzenetére
Örülök, hogy örülsz a kijavításoknak.
Azt, hogy "Ha akarsz más funkciót is, akkor használd", arra értettem, hogy használhatod attól még a mouseovert meg mouseoutot, de azt a kép-eltüntetést szerintem nagyon rossz gyakorlat lenne belesuvasztani (ismét erőforrásigény). Főleg, ha van szép alternatíva.
Attól még lehet más függvényekkel lehet feliratkozni ezekre az eseményekre.
Mindegy, nem tisztem meggyőzni, ha nem, hát nem.[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
-
Új hozzászólás Aktív témák
- Samsung Galaxy Note20 Ultra - a tollnak nincs ellenfele
- Formula-1
- Prémium külsőt kaphat a Motorola Moto G85 5G
- Eredeti játékok OFF topik
- Politika
- Telekom mobilszolgáltatások
- Fűnyíró topik
- Külpolitika
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Kormányok / autós szimulátorok topicja
- További aktív témák...
- Dell Latitude 5300 2in1,13.3",FHD,i5-8365U,16GB DDR4,256GB SSD,WIN10,Touch
- - MAKULÁTLAN - ASUS ZENBOOK PRO 16X 4K OLED - i9-12900H, RTX 3060, 32GB, 1TB, Win11PRO, 3 ÉV GARI
- ÚJ ASUS ROG ZEPHYRUS G16 - 16" WQXGA 240Hz - i9-13900H - 16GB - 1TB - RTX 4050 - Win10 - Garancia
- Dell Latitude 7490,14",FHD,i5-8350U,16GB DDR4,256GB SSD,WIN10,TOUCH
- HP EliteBook 645 G10 (817M3EA) - ÚJ 14" üzleti notebook - Ryzen 5 PRO, W11 pro, WWAN
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen