- Milyen videókártyát?
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Házimozi belépő szinten
- GeForce RTX 5050 kártyák az MSI portfóliójából
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen billentyűzetet vegyek?
- Így nézz tévét 2025-ben: új ajánlások, régi szabályok
- OLED TV topic
- Házimozi haladó szinten
- Hobby elektronika
-
PROHARDVER!
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Jim-Y
veterán
Vannak online elerheto konyvek, probalom ugy linkelni, amilyen sorrendben en olvasnam oket:
http://speakingjs.com/
https://github.com/getify/You-Dont-Know-JS
http://eloquentjavascript.net/
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
https://leanpub.com/understandinges6/read
http://read.humanjavascript.com/
---
http://www.javascriptenlightenment.com/
https://leanpub.com/javascript-spessore/read
https://leanpub.com/javascript-allonge/readhttps://github.com/vhf/free-programming-books/blob/master/free-programming-books.md#javascript
De vannak hasznos netes oktatoanyagok is, amiket most nem fogok belinkelni ugyse nezi meg senki
-
Speeedfire
félisten
Én a codeschool-t ajánlom. Van kb 4 kurzus js-re. Ha sajnálod rá a zsetont, akkor van hell pass is 2 napra.
-
adam_
senior tag
Tudnátok ajánlani egy jól felépített, példákat tartalmazó, magyar vagy német nyelvű Javascript könyvet, jegyzetet, ami elsősorban kezdőknek szól, de "komolyabb" szintre is el lehet vele jutni a végére?
Nézegettem amazonon ilyen összefoglalós felépítésű könyveket, ezt találtam pl, tanult már valaki ezen kiadó könyveiből, tapasztalatok?
JavaScript-kurz-gut-David-Flanagan
Nem hiszek az ilyen "Tanuljunk meg 24 óra alatt... " és hasonló féle könyvekben, azért keresnek egy igazán jót, és elismertet Javascript témában. Az általam találtak jó értékeléseket kaptak, de sajnos én még nem ismerem ezeket, és nem tudom, hogy érdemes lenne-e megvennem.
-
Agony
aktív tag
Sziasztok!
Szeretnék egy kis segítséget kérni egy meglévő javascript alapú teszt módosításához. Egy barátomnak ajánlottam fel -felelőtlenül-, hogy régebbről vannak word tesztjeim elfekvőben, esetleg ezeket tudja használni a diákok alap word tudásának teszteléséhez.
A gondom mindössze annyi, hogy ebbe a tesztbe be lehet kapcsolni, hogy jelszót kérjen a kiértékelés előtt, de nekem dunsztom sincs a javascripthez, neki viszont úgy kellene, hogy a diákok ne töltsék ki 101x kispekulálva a helyes válaszokat.
Innen lehet letölteni a teszt fájljait:
https://www.dropbox.com/s/x1xkjnd2o3uzycc/wordteszt1.rar?dl=0
A 2_Lecke mappában a L02_TESZT.html-el indul a teszt és a testsys mappában a template.js végzi a kiértékelést.
Kliens oldalon a fájlban tárolódik a jelszó (szerintem a template.js fájlban), de ez azért nem probléma, mert nagyon alap tudású diákoknak lesz, kizárt, hogy a forráskódot olvasgatnák... word kezdő felhasználók közül aki kikeresi a forráskódból a jelszót, eleve megérdemli az ötöst.
Előre is köszönöm a segítséget!
-
Sk8erPeter
nagyúr
Pont nemrég írt róla:
http://prohardver.hu/tema/javascript_topic/hsz_4249-4249.html
Igazából nagyon röviden annyi a gond vele, hogy bizonyos helyzetekben a kódírás vagy épp kódolvasás során nem egyértelmű, egész pontosan mire is vonatkozik a this, ezt el lehet kerülni azzal, ha még "időben", a megfelelő helyen átadod a this-t egy beszédes változónak, vagy például eseménykezelőkben az event.targetet, event.currentTargetet, stb. használod.Azért persze olyan nagyon démonizálni sem kell, például egy rövid eseménykezelőben nincs baj belőle, ha a this-t használod (vagy $(this)-t), ha az elég egyértelmű, viszont ha már picit bonyolódik a helyzet, érdemes egyértelműbbé tenni a kódot (az olvashatóság és a helyes működés érdekében is). Azért mondjuk a kód jobb, ha minden tekintetben következetes.
-
Sk8erPeter
nagyúr
válasz
fordfairlane #4551 üzenetére
Igen, pont ezt fejtegettük Jim-Y-vel, ő is demonstrációs céllal mutatta a példákat.
-
Cathfaern
nagyúr
válasz
Sk8erPeter #4550 üzenetére
+ Jim-Y:
Jogos, nálatok a pont
Bár akkor tényleg nem tudom a feladatban hogy működött.
-
Jim-Y
veterán
válasz
fordfairlane #4551 üzenetére
De ezt miert nekem irod?
-
Sk8erPeter
nagyúr
válasz
Cathfaern #4546 üzenetére
"jquery-s eseményen belül a this a jquery object lesz"
Hát pedig ez nagy tévedés, itt egy példa, amin keresztül igen könnyű belátni:
http://jsfiddle.net/6k7jpzbe/ -
Jim-Y
veterán
válasz
Cathfaern #4546 üzenetére
Errol tudnal bovebb infot adni? Mert szerintem: http://jsfiddle.net/Jim_Y/4ykbmdL3/1/
-
Jim-Y
veterán
válasz
gergo5991 #4545 üzenetére
Hat pedig nem kene neki mukodnie...http://jsfiddle.net/Jim_Y/4ykbmdL3/
-
Cathfaern
nagyúr
válasz
gergo5991 #4545 üzenetére
a .toggleClass paraméterében azt a class nevet kell megadni, amit ki vagy be akarsz kapcsolni. Értelemszerűen ha be volt kapcsolva, akkor kikapcsolja, ha ki volt kapcsolva, akkor bekapcsolja.
Jim-Y:
jquery-s eseményen belül a this a jquery object lesz. De ez benne van a feladat leírásában is. Mondjuk az tény, hogy biztosabb, ha körérakja az ember a $()-t. -
gergo5991
őstag
sziasztok, ebben kene egy kis help:
kepakarhogy probalom megcsinalni meg miegysmas, nem akar osszejonni a dolog
-
Jim-Y
veterán
válasz
Sk8erPeter #4539 üzenetére
Nahát nahát, hondán felbuzdulva vagy sem, de nagyon verszemes vagy ma este. A csshez kevéssé érték, de ezt felvallalom, szerintem amúgy sem szégyen nem tudni valamit. A jó pap is holtig tanul :-)
-
Sk8erPeter
nagyúr
Szerinted a selectorok csak a jQuery miatt érdekesek?
Sajnos ez most nem volt túl értelmes önigazolás, hogy nem komálod a jQuery-t.
Egyrészt ugye kezdjük a selectorokat a CSS-nél. Ha nem vágod a selectorok működését, nem vágod a CSS működését. Aztán a selectorokra építve ott van a .querySelector() (document/Element), .querySelectorAll() (document/Element) is.
Meg ott van a Sizzle JavaScript Selector Library, ami pure JS. Ezt használja a jQuery. -
Jim-Y
veterán
válasz
Sk8erPeter #4537 üzenetére
Hát, nem túlságosan vagyok oda a jqueryert, csak az ajaxot szoktam sűrűn használni belőle, de való igaz, hogy selectorokban nem vagyok otthon:-( meg amúgy is, mondtam én valaha is hogy sikerült már működő kódot írnom? :-P
-
Sk8erPeter
nagyúr
Hogy tudtál eddig működő kódot írni, ha nem tudtad, hogy működnek a selectorok?
Nehogy még véletlenül valami kezdő félreértse, inkább leírom, hogy van helyesen:
1.) '#content.inner'
- content azonosítójú ÉS inner class-szal ellátott elemre illeszkedik:<div id="content" class="inner">
...
</div>2.) '#content, .inner'
- content azonosítóval VAGY inner osztállyal ellátott elemre illeszkedik (az is jó, ha az egyik ezek közül nincs meg, vagy ha ugyanarról az elemről beszélünk, és mindkettő igaz rá, de ezt most szándékosan kihagyom a példákból, nehogy valakit megtévesszen) - hiszen felsoroljuk, mely elemeket szeretnénk kiválasztani:erre is illeszkedik (szándékosan különraktam, nem hierarchikusan):
<div id="content">...</div>
<div class="inner">...</div>erre is (egy másik elembe van ágyazva, de tök mindegy):
<div id="content">
...
</div>
<div id="anotherone">
...
<div class="inner">...</div>
...
</div>és erre is (itt egymásba ágyazva szerepelnek):
<div id="content">
...
<div class="inner">...</div>
...
</div>3.) '#content .inner'
- a content azonosítóval ellátott elemen belüli, inner osztállyal ellátott elem(ek)et keressük (egymásba ágyazott struktúra):<div id="content">
...
<div class="inner">...</div>
...
</div> -
Jim-Y
veterán
válasz
Speeedfire #4535 üzenetére
Attól függ, hogy mit akarsz elérni, legalábbis én úgy értelmezem, hogy..hmm, ja látom már, ebben mi a logika? Rosszul értelmeztem... én azt hittem, hogy
'#content.inner' ->
<div id="content">
content
<div class="inner">inner</div>
</div>'#content, .inner' -> felsorolás
'#content .inner' -> invalid
De látom, hogy nem így van.. fene, bocs.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #4532 üzenetére
Na, akkor még egyszer: tehát minden kattintás után kiíródik ez a warning a konzolra? (És mindig az eseménykezelő függvény teljes lefutása után?)
-
Jim-Y
veterán
válasz
Speeedfire #4532 üzenetére
1: TIL, jsfiddle-ön működik az emmet
Nem tudom, hogy ez e a problémád, de én pont tegnap futottam bele event delegation-nél:
Meg kell jegyeznem, hogy nekem sem volt intuitív a vessző
megj: kipróbáltam FF-on is, nincs semmi warning, csak simán nem mükszik, szóval más lesz a probléma, ezen felül..
-
Speeedfire
félisten
válasz
fordfairlane #4527 üzenetére
A valami így néz ki: "#egyediazonosító .osztály".
Sk8erPeter:Ez most nekem kicsit gyanús mondat... Akkor egész pontosan hogy is dobja a hibát? Az "esemény után"?
Igen, az esemény után dobja, de nem hiba, hanem warning.Tehát amikor a click event konkrétan megtörténik? Az eseménykezelő lefutása után? VAGY csak az eseménykezelő beregisztrálása (a mutatott kódrészlet lefutása) után, tehát még nincs semmi köze a kattintás eseményhez, csak szóltunk, hogy van egy ilyen eseménykezelőnk?
A fenti kódrészlet lefutása után dobja, amikor a click esemény már lefutott.Hát vigyázzá', itt a szavaknak SÚLYA VAN!!!!44NÉGYNÉGY
Vigyázok! NÉGY!!!444!!!NÉGY! -
-
Sk8erPeter
nagyúr
válasz
Aquiles #4529 üzenetére
Pl.: jQuery UI Autocomplete, azonbelül a Remote datasource példa az érdekes.
-
Aquiles
csendes tag
Sziasztok!
Egy olyan keresőt szeretnék létrehozni, ami a lenti oldalhoz hasonlóan jeleníti meg a találatokat, ha valaki elkezd bele írni valamit, adatbázisból, ami jelenleg egy excel fájlban található.
Ötleteket várnék milyen programmal kellene/lehetne ezt így kivitelezni? Másik kérdés: hogy hívják ezt az objektumot ebben a formában?
Konkrétan egy olyan beviteli mezőt szeretnék létrehozni, amibe hogyha beírjuk az adatot, kiírja a lehetséges találatokat egy adatbázisból.
Az oldalon szereplő mező funkciót szeretném rekonstruálni a saját adatbázisommal: http://cpuboss.com/compare-cpus
Köszi előre is!
Üdv.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #4526 üzenetére
"Ami érdekes volt, hogy az esemény után dobta ezt a hibát, nem közben.Holott utána már semmi mást nem hívok meg."
Ez most nekem kicsit gyanús mondat... Akkor egész pontosan hogy is dobja a hibát? Az "esemény után"? Tehát amikor a click event konkrétan megtörténik? Az eseménykezelő lefutása után? VAGY csak az eseménykezelő beregisztrálása (a mutatott kódrészlet lefutása) után, tehát még nincs semmi köze a kattintás eseményhez, csak szóltunk, hogy van egy ilyen eseménykezelőnk?
Hát vigyázzá', itt a szavaknak SÚLYA VAN!!!!44NÉGYNÉGY -
fordfairlane
veterán
válasz
Speeedfire #4526 üzenetére
A 'valami' az nem egy css szelektor akar lenni?
-
Speeedfire
félisten
válasz
Sk8erPeter #4525 üzenetére
Hétfőn ki is próbálom, hétvégén nem dolgozok.
"Azt próbáltam már, de nem hozott eredményt"
Hogyan próbálkoztál?Amelyik inputnál dobálta ezt a hibát, ott teleraktam breakpoint-okkal. Ami érdekes volt, hogy az esemény után dobta ezt a hibát, nem közben.Holott utána már semmi mást nem hívok meg. Vagy nem tudok róla és munkatársam bedrótozott oda valamit.
$('#container').on('click', 'valami', function(e){
//funkciók, hiba nélkül
});
//itt pedig már dobta is a warning-ot -
Sk8erPeter
nagyúr
válasz
Speeedfire #4524 üzenetére
"Egy darab van pedig belőle."
Egy darab azonosítót használsz az egész oldalon?
Mondom, próbáld meg másik jQuery-verzióval, legalább kíváncsiságból, semmi mást nem változtatva, hogy ott is előfordul-e a hibajelenség. Annyira nem elképzelhetetlen, hogy valamilyen probléma csak Firefox alatt jön elő, rákeresve az "Empty string passed to getElementById()" hibaüzenetre sokaknál FF-hez kötődő probléma volt. Fura a hibajelenség, mert ennyiből belső implementáció hibájának tűnik (aztán lehet, hogy nem, de próbáld má' ki másikkal).
"Azt próbáltam már, de nem hozott eredményt"
Hogyan próbálkoztál? -
Speeedfire
félisten
válasz
Sk8erPeter #4522 üzenetére
Egy darab van pedig belőle. Mondjuk igazából csak warning, nem error csak ff alatt látom, hogy szemetelget a konzolba.
fordfairlane: Azt próbáltam már, de nem hozott eredményt. Lehet megnézem majd egy másik jquery-vel is, hátha ott nem okoz már ez gondot. -
fordfairlane
veterán
válasz
Speeedfire #4521 üzenetére
Breakpointra lesz szükséged, de a minified jquery-vel nehéz lesz megtalálni.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #4519 üzenetére
Egészen biztos, hogy egy azonosítóból csak egy darab van a megjelenített oldalon? Itt valaki azt írja, hogy azt tapasztalta, hogy FF-ban akkor keletkezik ilyen hiba, ha ugyanazzal az azonosítóval több elem is el van látva, ami persze kerülendő. Nem tudom, ez-e a probléma, lehet, hogy nincs köze hozzá, de csak egy tipp.
Következő tipp az lenne, hogy hátha valami furcsa bug jelentkezik Firefox esetén, esetleg próbálj meg egy másik jQuery-változatot. Aztán egyéb oka is lehet, most hirtelen ennyi jutott eszembe. -
Speeedfire
félisten
válasz
fordfairlane #4520 üzenetére
Igen, erre gondolok, de nálam ez teljesen üres. Azt írja nincsenek megjelenítendő veremértékek.
Sőt, a változók rész is üres. -
fordfairlane
veterán
válasz
Speeedfire #4519 üzenetére
Erre gondolsz?
-
Speeedfire
félisten
Firefox alatt van olyan opció, hogy lássam a js hívási láncot?
Chrome alatt, ha js hiba van, akkor látom, hogy mi mit hívott meg. FF alatt viszont csak ennyit látok.A getElementById() üres karakterláncot kapott. jquery-2.1.1.min.js:2
De, hogy mi hívta ezt meg, milyen adattal azt nem tudom. Chrome alatt természetesen nem jelentkezik a hiba.
-
Heló!
Köszönöm az elemzést!
A változónevekre figyelni fogok.
A K&R style-t azért használom, mert én így jobban átlátom a kódok kezdőként, egyébként nem C++-ból jövök, hanem a 17 évvel ezelötti középiskolás pascal-ból.
Igyekezni fogok ezt is megszokni.
Hinter tool-t keresek majd a Bluefish-hez, bár lehet hogy áttérek másra.
Viszont ami most megfogott.
A a változót azért raktam külön, hogy ne a ciklusban fusson le minden alkalommal.
Egy függvénybe kellene tennem? -
Jim-Y
veterán
Szia.
Sajnos még mindig nem értek a canvas-hoz, így megint csak a kódodról fogok beszélni.
> Remélem, nem "csúnya" nagyon a kódom.
Nem fogok kertelni, szerintem nem fogod magadra venni, nem is azért írom, de... igen az, sajnos elég csúnya
Na persze ez nem gond! Tényleg nem. Egyrészt mert mindenki kezdi valahol, másrészt meg az látszik, hogy más múltad van. Szépen nem így irunk JavaScript kódot.Ezekkel van probléma benne:
var betolt = function(i,b,a)
{
imageObj[i].onload = function ()
{
ctx.drawImage(imageObj[i], b, 0, d, a);
};
};i, b, a -> ezek a formális változónevek egész egyszerűen rosszak, sosem adunk egybetűs váltzóneveket!
Nem tudni, hogy mit jelölnek. i az vajon index, a b meg a, na erre még tippe sincs az embernek. Nincs overhead akkor sem, ha 1 betű helyett 20 hosszú változó neveket használsz, cserébe értelmes lesz a kód. Ennek azért van jelentősége, mert
1: egy cégnél nem csak te fogod a kódodat olvasni, hanem előbb utóbb más is. És kontextus nélkül ezek a nevek konkrétan hátráltatják más munkáját, az idő pénz, tehát az ilyen nevek használatával pénz deficit keletkezik (lol). Komolyra fordítva a szót, tényleg más is akarja még olvasni a kódod, ne adj isten módosítani, olyankor jól jön ha "self-descriptive" a kódod.
2: JS-ben gyakran végzünk minifikálást, ami az egyik állomása a buildelésnek, így nem kell figyelni arra, hogy minél tömörebb legyen a kód, a végtermék úgyis tömör lesz.
Példa: még ennél a minimalista példánál is látszik, bár mondanom sem kell, hogy értelmesebb kódnál jobban kijön a minifikálás "előnye"Before (tordeltem):
var myOwnImageObject = [];
function imageLoading(indexVar, someOtherVarWhichHasADescriptiveName, anotherFormalParam) {
myOwnImageObject[indexVar].onload = function() {
context.drawImage(
myOwnImageObject[indexVar],
someOtherVarWhichHasADescriptiveName,
0,
wut,
anotherFormalParam
);
};
}After:
function imageLoading(n,a,e){myOwnImageObject[n].onload=function(){context.drawImage(myOwnImageObject[n],a,0,wut,e)}}var myOwnImageObject=[];Tehát nincs igazán érv az egybetűs változónevek mellett.
3:
Nem túl jó kódod stílusa. Gondolom C++-ból jöttél át, legalábbis én úgy tudom, hogy ott szoktak K&R style -t használni. Ez az automatikus pontosvessző , áhh inkább írom angolul úgyis úgy tudsz rákeresni: automatic semicolon insertion miatt nem ajánlott így kódolni JavaScriptben. Nagyon sok verzió létezik, én leginkább az airbnb-hez tartom magam. Számomra ez eredményezi a leginkább olvasható, karbantartható kódot. Tehát ha az airbnb szerint írjuk a kódodat, akkor valahogy így nézne ki (ha én írnám akkor is):var c = document.getElementById("myCanvas"),
ctx = c.getContext("2d"),
files = document.getElementById("files-upload").files,
imageObj = [],
a = (1920 - (files.length - 1)) / (files.length);
function betolt(i, b, a) {
imageObj[i].onload = function() {
ctx.drawImage(imageObj[i], b, 0, d, a);
};
}
for (var i = 0, len = files.length; i < len; ++i) {
b = (a + 1) * i;
imageObj[i] = new Image();
imageObj[i].src = "útvonal" + files[i].name;
betolt(i, b, a);
}4:
Az a változót tudatosan, vagy sem, de globális scope-ba helyezted, ez rossz szokás, abszolút kerülendő.5:
ez inkább jó tanács: JSHint vagy egyéb linter toolok használata javallott. Szinte minden Editorhoz, IDE-hez létezik már plugin.Üdv
-
Heló!
A példáidat sajnos nem tudtam az én kódommal összehozni, ezért úgy döntöttem, hogy csak az elméletet használom fel belőle (enclosure), és kerestem erre a neten példákat, és ez lett a működő eredmény:
{
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var files = document.getElementById("files-upload").files;
var imageObj = [];
var betolt = function(i,b,a)
{
imageObj[i].onload = function ()
{
ctx.drawImage(imageObj[i], b, 0, d, a);
};
};
a = ( 1920 - (files.length - 1) ) / ( files.length );
for (var i = 0; i < files.length; i++)
{
b = ( a + 1 ) * i;
imageObj[i] = new Image();
imageObj[i].src = "útvonal"+files[i].name;
betolt(i,b,a);
}
}A problémát a te példáidnál az okozta, hogy nem értettem a három közti különbséget és a szintaktikát - pl. a kapcsos zárójel után írt (i), vagy az, hogy egy zárójelen belül van egy függvény az onload jobb oldalán, vagy a settimeout-os Image függvény értelmét sem értem. Ezt mind a kettes példából vettem.
Persze, utána fogok nézni mindegyiknek, mert ez így nem állapot, hogy ilyen alap dolgokat nem tudok, csak most nem hagyott nyugodni a dolog és működésre akartam bírni olyan módszerrel, amit értek.
Remélem, nem "csúnya" nagyon a kódom.Ezen kívül van még egy kérdésem: A betöltött képeket szeretném mouse scroll segítségével átméretezni úgy, hogy a kép nem lép ki a rendelkezésére álló keretből, hanem levágódik a széle, ami nem fér ki - persze egérrel lehetne drage-elni is a képet. További funkció lenne az egymás melletti képek közti választóvónal eltolása.
Összességében egyfajta montázs progit akarok csinálni - egyelőre csak egymás melletti képekkel, átfedés nélkül.
Egyelőre még nem jártam sikerrel, de felmerült egy kérdés ezzel kapcsolatban: elég ehhez egy canvas, vagy érdemesebb képenként klön canvas-t létrehozni? -
_ak_
addikt
Sziasztok!
Egy apró technikai kkérdésem lenne. Node.js-el ismerkedem jelenleg és nodemon-t használok, mindezt windows alatt. Akinek van ezzel tapasztalata meg tudná osztani, hogy mennyi idő alatt frissíti a módosításokat?
Nálam 20-40ms kell neki, vagrant box alatt még több és csak legacy módban fut, de neten található tutorialnál sok 3-5ms-t látok. Page refresh esetén 1-2 ms-t, ami nálam megint csak inkább 3 ms átlagba.Arra lennék kíváncsi, hogy ez a win miatt "lassú" vagy csak a gépem lassabb ennyivel.
-
martonx
veterán
válasz
fordfairlane #4513 üzenetére
És azzal folytatnám, hogy js oldalon ellenőrizném, hogy jött-e megjelenítendő adat.
Ha nem, akkor felfednék egy addig hide-olt gombot, és arra kattintva ajax-al elküldeném a szervernek az input mező tartalmát. Szerver oldalon meg már csak egy db insert kell a boldogsághoz. -
bigbuda
aktív tag
Sziasztok!
Kérdésem az lenne:
PHP-ba kellene egy combobox, aminek elemei egy adatbázisból lennének lehívva. De a combobox-ba kézzel is be lehetne írni és ha a beírt elem még nincs az elemek között, akkor úgy is el lehet menteni és a beírt elem eltárolódik az adatbázisban, tehát a következő használatkor már ott lesz alapjáraton a választhatók között..
Ezt hogyan lehetne megcsinálni? -
Sk8erPeter
nagyúr
válasz
Chrystall #4505 üzenetére
Szerintem használj valami normális lejátszót első körben, amit karban is tartanak.
Példa:
jPlayer
http://www.jplayer.org/latest/demos/
eléggé szanaszéjjel-állítgatható.
Itt van a forráskód verziókezelőn is, ha kell: https://github.com/happyworm/jPlayer
A dev-ágon 2 napja volt commit, szóval asszem ez jól mutatja, hogy eléggé karbantartják.Persze hogy Safariban mit művel a lejátszó, fogalmam sincs.
Próbáld ki a demóoldalon. Mindenesetre érdemes karbantartott library-ket használni úgy általában.
-
Chrystall
senior tag
Sziasztok!
Van a neten egy SCM player nevű audiólejátszó. Egy Javascript kódot generál, amit a honlapba ágyazva megjelenik a lejátszó. Ez a honlap alján lesz mindig látható, és folyamatosan játszik le a háttérben ha elindul, szóval gyanítom valami AJAX-os dolog lehet benne. Lényeg a lényeg, működik jól, ám Safariban Mac-en nem. Volna esetleg ötletetek ez mitől lehet? Így néz ki a honlap Safariban:
Ez meg a kód lenne:
<!-- SCM Music Player http://scmplayer.net -->
<script type="text/javascript" src="http://scmplayer.net/script.js"
data-config="{'skin':'skins/aquaBlue/skin.css','volume':50,'autoplay':false,'shuffle':true,'repeat':1,'placement':'bottom','showplaylist':false,'playlist':'http://youtu.be/B0N9yFcz4ho?list=RDB0N9yFcz4ho'}" ></script>
<!-- SCM Music Player script end -->Gondolom ennek még semmi jelentősége, és a script.js file tartalma lenne az, ami számít, vagy a skin.css. Ami gyanús, hogy van egy ikon jobb szélen, ami a lejátszási listát hozza elő, és az úgy jön elő, hogy a honlap jobb szélén fölugrik egy ablak, és a honlapot összébb nyomja. Mivel látható hogy a Safariban is szélen lesz egy nagy üres sáv, nem tudom nem-e abban a kódrészben van-e valami hiba, ami ezt a lejátszási lista ablakot definiálja.
-
Jim-Y
veterán
Szia
1: ... = Array; Ehelyett inkabb ... = [] az ajanlott. [link]
2: ne tegyel semmit kulon fuggvenybe, ahogy fordfairlane is irta, a closure nem tartalmazza az i valtozodat, itt egy (ROSSZ) pelda, ez tortenik most a kododban.
http://jsfiddle.net/Jim_Y/6vy2x7Lo/1/
Latszik, hogy 10x "10" irodik ki a kepernyore, tehat ha lebontjuk, akkor
ctx.drawImage(imageObj[10], b, 0, a, 1080);
ctx.drawImage(imageObj[10], b, 0, a, 1080);
ctx.drawImage(imageObj[10], b, 0, a, 1080);
ctx.drawImage(imageObj[10], b, 0, a, 1080);
...stb tortenikEz azert van, mert az onload fuggveny egy closure-t kepez az ot korulolelo fuggvennyel, ami azt jelenti, hogy amikor az onload fv. lefut, akkor mindig megnezni a runtime, hogy az aktualis kontextusban mi az i valtozo erteke. Mivel az onload aszinkron, ezert amikor azok lefutnak, addigra a ciklus mar vegzett, es az i ciklusvaltozo erteket 10-re novelte. Abban a pillanatban ahogy az onload lookup-olja az i-t, az mar 10-es ertekkel szerepel a kontextusban. Ezert lesz 10x"10" kiirva a konzolra.
Ennek megoldasa, egy uj Execution Context (~ uj variable environment, ~closure) letrehozasaval orvosolhato, amiben az i valtozo mindig az eppen aktualis ertekre lesz beallitva, igy amikor az onload (lookup i) tortenik, akkor az aktualis environment context-ben az i jo ertekkel fog szerepelni.
KetHarom pelda:1: http://jsfiddle.net/Jim_Y/6vy2x7Lo/2/ reading Function.prototype.bind
2: http://jsfiddle.net/Jim_Y/6vy2x7Lo/3/ reading closures
3: http://jsfiddle.net/Jim_Y/6vy2x7Lo/4/ reading IIFE3: Az onload aszinkron muvelet, ami a ciklus lefutasa utan fog csak meghivodni.
Itt egy szemlelteto pelda http://jsfiddle.net/Jim_Y/LsuLL7dg/1/
A kodban a setTimeout az onload-ot szemlelteti. Latszik, hogy amit azon kivul csinalsz, az elobb fut le, mint amit azon belul.
Udv
-
válasz
fordfairlane #4497 üzenetére
Én is ilyesmire tippelek, mert valószínűleg a következő ciklus hamarabb írja felül a ciklus az i-t, mint ahogy betöltődne a kép.
Este kipróbálom a két for ciklusos módszert, hátha. Viszont itt sem biztosított, hogy a képek addigra betöltődnek. Mi van, ha nagyobb egy kép?Olyasmi megoldáson töröm a fejem, ami biztosítja, hogy a ciklusok ne vágják felül az imageObj[I] változót, hanem egymástól függetlenül várják ki a betöltést.
Lehet, hogy egy külön függvénybe kellene raknom az onload-ot és az i-t paraméterként beadni?
-
válasz
sztanozs #4494 üzenetére
Próbáltam, ugyanaz.
Az a baj, hogy nem látom még át hogy mi történik a háttérben, és mi okozza a problémát. Valami időzítési móka lesz, szerintem, de lehet, hogy tévedek.
Olyan ciklus nincs, ami egy eseményre megy csak tovább?
Esetleg a változónévként működő tömb elemek akadnak össze a ciklus különböző köreiben?
Lehet, hogy mégsem a indexes megoldást kellene erőltetnem, hanem valami pointeres mókát?
Vagy az egész kód alapvetően rossz felépítésű? Nem tartom bonyolult dolognak, hogy egy lista alapján képeket töltök be canvas-ba, ezért furcsa, hogy máris ilyenbe ütköztem. -
sztanozs
veterán
Azt írja, hogy a drawImage függvény szignatúrája nem jó...
Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': No function was found that matched the signature providedJa nem - [link]
Note If you're specifying an image, be sure the image content has loaded fully if you're calculating the width and height of the img tag. -
Sziasztok!
Javascript-ben mi a módja egy változó nevének a dinamikus változtatásának?
HTML5 Canvas-ba kell betöltenem sok képet. Előre nem tudom, hogy hány kép lesz; amennyit a júzer kiválaszt.
Vagyis nekem kellene létrehoznom a ImageObject változókat, hogy ne mindig ugyanabba a változóba töltse be a képet.
Próbálkoztam ImageObject[i]-vel is az alábbi módon:var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var files = document.getElementById("files-upload").files;
var imageObj = Array;
for (var i = 0; i < files.length; i++)
{
imageObj[i] = new Image();
imageObj[i].onload = function()
{
ctx.drawImage(imageObj[i], b, 0, a, 1080);
}
imageObj[i].src = "path/"+files[i].name;Erre sajna ezt kapom:
Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': No function was found that matched the signature provided.
imageObj.(anonymous function).onloadA DrawImage-es sorban történik ez a hiba.
Mi a megszokott eljárás ilyen esetben?
Kössz!
-
Zedz
addikt
Köszönöm a válaszokat, elolvasok még pár cikket aztán kipróbálgatom azokat amik tetszenek.
-
Jim-Y
veterán
Mostanaban az Angular + Ember megy nagyon. Szemely szerint csak kicsit ismerem oket, de nem igazan tetszik egyik sem, jelenleg a React+Flux -al foglalkozom ami szerintem, vag legalabbis nekem, jobb
Ja igen, csak azt nem irtam le, hogy ezt miert irtam le, szv ha ezek kozul valamelyikkel probalkozol akkor mar nem jarsz rosszul ugyanis mindharomra van kereslet. Ugy erzem, hogy a harom kozul az Angular a legkiforrottabb, az Ember az uj Angular, a ReactFlux pedig egy teljesen mas megkozelites, gyerekcipoben jar, de elegge igeretes
-
martonx
veterán
Figyi, persze ez nem rossz, de tényleg minden azon múlik, hogy melyik megközelítésnek van több előnye?
Behúzni azért egy angularjs-t mondjuk, hogy pár oldalnyi portálnál oldalanként 3 mezőt data-bindoljál abszolút overkill.
Ugyanakkor szerver oldalon kigeneráltatni jó nagy, komplex agyon data-bindolt, ha ide kattintok, amott változzon page-eket, majd fw nélkül elkezdeni köré írni a több ezer sornyi js-t, meg szintén overkill.Önmagában egy SPA-hoz nem kell semmiféle js fw, elég lehet egy szimpla navigációs lib, mint pl. a pagejs
-
Zedz
addikt
válasz
martonx #4476 üzenetére
Azt értem, hogy egyáltalán nem kötelező használni, csak egy fajta segítség 1-1 ilyen fw. A kérdésem arra irányul, hogy ezeket főleg SPA alá szokták rakni, igaz? Tehát ha készül egy oldal amin pl. nem baj ha content váltásnál újratölt, akkor oda mondjuk felesleges, elég ha szép OOP-ban megcsinálja az ember?
-
Zedz
addikt
Sziasztok,
Elkezdtem nézegetni ismét a különböző JS frameworköket. A kérdésem annyi így elsőre, hogy ezek használata csak SPA készítésnél fontosak? Úgy értem ha nem elvárás, hogy az oldal ne töltsön újra, akkor elég ezek nélkül megírni a kliens oldalt?
-
AA-
csendes tag
Hali!
Javascriptben jártas programozót keresek!
Egy művészeti projekthez keresek olyan programozót, aki szabadidejében tudna segíteni. A cél egy olyan script megírása, ami a photoshopba beépülve önállóan hoz létre képeket. A photoshophoz van egy bővítmény, ami a felhasználó munkafolyamatának javascript kódjait egy txt fájlban tárolja. Tehát a programozó feladata az lenne, hogy ezeket a lépéseket rendezi és egy használható scriptet hoz létre.
A projekt egy iskolai feladat melynek témája az önkifejezés és szubjektivitás. Több hangulatot több scripttel kifejezve a cél egy olyan folyamat létrehozása, mely lefuttatása után az eredmény mindig változó, hangulatában mégis hasonló marad. Ez a feladat az éves projektem egy részét képezi. Elsősorban olyan főiskolás hallgatókat keresek, akik kíváncsiságból foglalkoznának a feladattal. Mivel én is suliba járok és az egész projekt egy vizsgamunka része lesz, fizetni sajnos nem tudok érte. Ellenben jövő nyáron a projekt Budapesten ki lesz állítva és a segítőm neve fel lesz tüntetve.
Ha valakit így is érdekel feladat, küldjön itt egy üzenetet és mondom a részleteket.
Köszönöm! -
martonx
veterán
válasz
theiron320 #4472 üzenetére
setinterval
-
theiron320
aktív tag
Szerkesztés : meglett
function method(){
setTimeout(function doSomething() {
d1=document.getElementById("szdoboz");
d1.value = d1.value + "a";
setTimeout(doSomething, 1000);
}, 1000);
}Üdv. Egy olyan kódot szeretnék írni ami másodpercenként hozzáfűz egy a betűt egy textarea tartalmához majd frissíti azt.
function doItFunction(){
d1=document.getElementById("szdoboz");
d1.value = d1.value + "a";
}function method(){
var millisecondsToWait = 1000;
var i = 0;
while(i < 3){
setTimeout("doItFunction()", millisecondsToWait);
i = i + 1;
}}
Ha így csinálom akkor vár egy másodpercet és kiírja a három a betűt, nem úgy működik ahogy szeretném. Továbbá azt szeretném, hogy ez végtelen ciklusban működjön de ha while(true) - t teszek be akkor lefagy az egész ablak. Valami olyasmit szeretnék mint JAVA - ban a timer, de sajnos nem találtam. Ma kezdtem el a javascriptet szóval lehet, hogy ez nem nagy probléma, de minden segítség jól jönne.
-
-v-
addikt
Sracok, miert nem all meg a firebug a breakpointnal? Extjs 5 ... cache-t kikapcsoltam, probaltam tobb verziot, de a viewcontrolleremben marhara nem all meg ... mit csinaljak vagy mivel debugoljak?
-
cSuwwi
senior tag
Attól függ hogy hol van ez a kód.
Ha egy külön js fileban, akkor direkt módon sehogy. Én ilyenkor azt szoktam csinálni, hogy valamelyik html elemnek adok egy id-t, és egy data-valami attribnak az átadandó értéket. A js résznél meg kiolvasom ezt a data-t.Ha php fileban van akkor egy sima beleírással is mehet: <?=$valtozo?> (vagy ha nincs a short tags engedélyezve akkor <?php print $valtozo?>
-
Kommy
veterán
Sziasztok,
egy kis segítségre lenne szükségem, hogyan tudnám egy php változó értékét beleírni a következőbe:
var showTooltip = function(event) {
$('div.tooltip1').remove();
$('<div class="tooltip"><iframe width="200" height="100" frameborder="0" src="http://www.xx.com/valami.php?x=PHPVÁLTOZÓ"</iframe></div>')
.appendTo('body');
changeTooltipPosition(event);
};tehát a PHPVÁLTOZÓ helyére kéne beírni az értékét
-
pumatom
aktív tag
Ez a doboz tulajdonképpen egy ajánló szerű doboz, aminek a paraméterei css-sel vannak meghatározva.
Méret, fejléc, szín, stb...
A doboz fejléce alapjában 35px-lel mutatkozik a böngésző oldal alján, majd egy kattintásra jelenik meg az egész doboz tartalma.
Igazából ezt lett megoldva .js-el.
Valami megoldás lehet rá, mert pl a HVG portálja is egy hasonló dobozzal ajánl más cikekket, ami mobilon is tökéletes.
(Görgetve jelenik meg a doboz)
-
pumatom
aktív tag
Sziasztok!
Ablakhoz igazítási problémám lenne.
Van egy dobozom beviteli mezőkkel.
Ez a doboz egy .js kóddal van az ablak aljához igazítva, és x pixellel eltolva az ablak jobb oldalától.
Ha egy számítógépen nyitom meg, akkor teljesen jó, viszont a probléma a különböző mobileszközökön jön elő.
Amikor a mobileszközön bele "koppintok" a beviteli mezőbe, akkor ugye mobileszköztől függetlenül egy billentyűzet jelenik meg, amivel lehet írni a beviteli mezőbe.
A probléma: ahogy ez a billentyű megjelenik a képen, akkor ezt a fentebb említett dobozt a billentyű eltolja, de nem szorosan a a billentyű tetején jelenik meg (ahogy szeretném).
Pl.: Iphone-on kicsivel felette, ami még elmegy, de mondjuk egy galaxy tab 3 tableten nem megy a billentyű fölé, hanem fedésben van a beviteli mező a billentyűvel, ami problémás, mert nem látni, hogy mit írunk bele.
Lehet valamivel úgy rögzíteni ezt, hogy szorosan a billentyű tetejére rögzüljön?
-
sztanozs
veterán
Persze - plusz cookie-t vagy form változót tudsz csinálni, de szerver oldalon attól még bele kell "szinkronizálni" a változók közé. Nem js-sel hozod létre a session változót, hanem szerver oldalon van egy olyan hátsó ajtód, ami a klienstől kapott adatokból plusz session változót csinál...
Amúgy biztonsági szempontból szerintem kifejezetten nem ildomos kliens oldalról session változókat manipulálgani...
-
cSuwwi
senior tag
sztem ajaxal megoldhathatónak tűnik
sessionid-t is lehet ajaxal intézni, utána az urlhez fűzi -
norby10
csendes tag
Sziasztok, lehetséges olyasmi ,hogy Javascripttel létrehozzunk egy PHP Session változót?
-
-v-
addikt
Sracok, extjs 5-tel nyomul mar valaki?
-
Jim-Y
veterán
Csináltam egy Flux templatet ha esetleg valakit érdekel
-
Speeedfire
félisten
Nem szándékozom saját MVC-t írni, egyszerűen csak próbálom megtalálni a megfelelő struktúrát egy js app-hoz.
Köszi a prototype példát.
Arra gondoltam, hogy a model1-et egyszerű bővíteni a mode1.megvalami-val, de a model2-t már csak prototype-al lehet.var model1 = {
valami: function() {};
};
model1.megvalami = function() {};
var model2 = (function(store) {
var view = {};
view.store = function() {};
view.getProducts = 'product';
store.viewModels = view;
return store;
}(window.store || {}));
martonx: Félreértesz. A store.viewModels csak egy konténer lenne a többi viewModels-nek.
De közben rájöttem, hogy single page app alatt valóan elég egy viewModel (ko alapokon), ami a "controller". -
martonx
veterán
válasz
Speeedfire #4443 üzenetére
A 2-dik plédát minek bővíteni? Az úgy jó, ahogy van. Fogd fel controllerként. Szvsz szerver oldalon sem bővítget az ember származtatással éjjel-nappal controllereket.
Ha meg tényleg pont erre van szükség, akkor tényleg ott a prototype lehetőség. -
-
Jim-Y
veterán
válasz
Speeedfire #4443 üzenetére
Szia. Ha mindenképp by-hand akarod csinálni a dolgot, és nem akarsz használni MVC framework-öt, akkor -és itt most meg kell sajnos jegyeznem, hogy magamtól még nem csináltam MVC-t itthon- én kb így állnék neki.
https://github.com/jim-y/js-mvc
Annyi, hogy a view szerintem ebben a példámban eléggé sántít, ha ilyet csinálnék, akkor például a view az MVC-ben React lenne, vagy minimum Handlebars, a controller maradna VanillaJS, a model-t pedig a backendről szedném mondjuk egy NoSQL datastore-ból. Persze ha nem használnék mondjuk ember-t
"Én úgy tudom, hogy "funkció alapú osztályt", csak prototype-al tudom bővíteni, de lehet én tudom rosszul."
Hát megmondom őszintén ezt én sem értem, nem csak martonx.
A prototypeal egy JS típushoz tudsz példánymetódusokat adni.
-
Speeedfire
félisten
válasz
martonx #4442 üzenetére
Egyrészt nem értelek mit szeretnél, mi a problémád?
A 2.-dik példa bővítése a kérdés több fájlból. Van egy fő fájl, amihez behúzom a modulokat, ezt a részét nem tudom, hogy lehet megoldni.Nem lehetne valahogy az alapoktól kezdve, mi lenne ez a program, mi a szerepe a ko-nak benne, kb. hogyan strukturálnád a ko-t, leírnod, hogy mit is szeretnél?
A program egy dummy program lenne, hogy hogyan épül fel egy "nagyobb" single page app, sajnos ilyen tutoriálok nem nagyon vannak neten. Codeschool oldalon kipörgettem 4 js tanfolyamot is, de csak kis példák vannak benne.
A ko úgy kapcsolódik ide, hogy az oldal teljesen dinamikus lenne, ha valamire kattintok, módosítok, akkor az oldal többi része is módosuljon.
Jelenleg volt/van egy kisebb projektem, ahol jquery-vel több 100 sor az on(), trigger() függvény, ezeket pedig egy ko-val egyszerűbb lenne felépíteni.A ko struktúra nagyjából úgy lenne, hogy lennének a modeljeim, amiben leírom, hogy milyen attributumok vannak az adott modelben, validációk, összetett attributumok.
Illetve lennének mellette a viewModel-ek, amik a megjelenítést befolyásolják. Itt lennének a fenti példából kiindulva egy fő store modell, ami lényében az index action lenne. Ezt látja ha belép az oldalra és nem csinál semmit sem. Ezen kívül lenne mondjuk egy kosár, meg details megjelenítés is. A details alatt mondjuk hozzászólások.Másrészt kizártnak tartom, hogy e témában bármi is legyen a problémád, ahhoz prototype-ot kellene használnod.
Én úgy tudom, hogy "funkció alapú osztályt", csak prototype-al tudom bővíteni, de lehet én tudom rosszul.Bocs a sok kérdés miatt, de teljesen homály számomra ez a rész.
-
martonx
veterán
válasz
Speeedfire #4441 üzenetére
Egyrészt nem értelek mit szeretnél, mi a problémád? Nem lehetne valahogy az alapoktól kezdve, mi lenne ez a program, mi a szerepe a ko-nak benne, kb. hogyan strukturálnád a ko-t, leírnod, hogy mit is szeretnél?
Másrészt kizártnak tartom, hogy e témában bármi is legyen a problémád, ahhoz prototype-ot kellene használnod.
-
Speeedfire
félisten
-
martonx
veterán
válasz
Speeedfire #4439 üzenetére
Ez már a te döntésed. Vagy egy nagy controllert használsz, vagy "oldalanként" használsz egyet. Én ez utóbbit javasolnám, de ha elég egyszerű a projekt, egyszerű az oldalak modellje, akkor simán mehet egy kontrollerbe is akár.
-
Speeedfire
félisten
válasz
martonx #4436 üzenetére
Mi van abban az esetben ha mondjuk nekem a single page app, több részből is áll.
Gondolok itt mondjuk a fenti store elképzelésre. Van mondjuk egy ahol látom a termékeket, egy ahol a termék adatlapja van, egy a megrendelésről. Ezeket mind egy db controller-be tegyem bele?
Külön szeretném szedni mindenképp a modelleleket és a controllereket (viewModel).Php model szemlélettel (fenti általam mutatott js kód) szeretném megoldani, ami nem biztos, hogy jó megoldás, de egyelőre ezt találom átláthatónak.
-
Jim-Y
veterán
Nincs valami jo React-os tutorialotok?
-
martonx
veterán
válasz
Speeedfire #4434 üzenetére
Pont, hogy a 2. megoldástól lesz szépen strukturált a kliens oldal.
Knockoutról beszélünk, ahol nincs definiált controller, mint pl. angularjs-ben, de a fő modelledet fogd fel controllerként, azaz abba húzd meg a többi kis modellt, plusz az eseményeket itt mozgatod. Jim-Y szép példát tett fel jsfiddle-re. -
Speeedfire
félisten
Most még jobban belekavarodtam.
Az 1. példában ezek szerint valóban nincs szükség return értékre.
A 2. példában nem lesz átláthatatlan, ha sok osztály van a store alatt? Mert itt lényegében létrehozod a store golobális változót, majd mindent alá pakolsz. Vagy ilyenkor prototype-ot használsz?
A 4. nem tűnik rossznak, a require-t, amúgy is használni szeretném idővel.
-
Jim-Y
veterán
válasz
Speeedfire #4430 üzenetére
Példa1: azt szemlélteti, hogy felesleges a return ha így használod.
Példa2: Ahogy én csinálnám. Nem azért mutatom, mert, hogy ez a követendő, csak szerintem ez átláthatóbb
Példa3: ez kb így nézne ki CommonJS-ben (node, browserify, webpack), nem kipróbált példa!
Példa4: és így require-el. Ezt sem próbáltam ki. -
Speeedfire
félisten
De ha nagy az alkalmazás, akkor is szükség van névterekre vagy nem?
Erre gondoltam:
store.viewModels.store = function() {
var view = this;
view.products_list = ko.observableArray([]);
view.selectedProduct = ko.observable(false);
view.selectedProductsData = ko.observable(null);
view.selected_image = ko.observable(0);
view.gallery = ko.observableArray();
view.getProducts = function() {
$.ajax({
dataType: "json",
url: 'js/products.json',
success: function (data) {
//view.products_list(data);
view.products_list($.map(data, function(item){
return new store.models.product(item);
}));
}
});
};
view.goToProduct = function (product) {
$.ajax({
dataType: "json",
url: 'js/product.json',
data: {
"product_id": product.product_id
},
success: function (data) {
view.selectedProductsData(data);
view.selectedProduct(true);
view.setGallery();
}
});
};
view.setSelectedProduct = function () {
view.selectedProduct(false);
view.selectedProductsData(null);
};
view.setGallery = function () {
var gallery = [];
var product = view.selectedProductsData;
gallery = $.map(product().gallery, function(item){
return new store.models.Gallery(item);
});
view.selected_image(gallery[0]);
view.gallery(gallery);
};
view.setSelectedImage = function (image) {
view.selected_image(image);
};
return view;
};Nekem ez jobban bejött, mint pl amikor a functiók vannak a return értékben. Vagy a return-ben hivatkozok a private metódusokra.
Az require lesz a következő, aminek neki szeretnék esni. Csak ezt a pure js-t helyre kell még raknom.
-
Jim-Y
veterán
válasz
Speeedfire #4428 üzenetére
Szerintem nem kell ennyire túlbonyolítani a dolgokat, ha kicsi az alkalmazás, egy revealing module pattern, azon belül meg valahogy strukturálni a dolgokat. Ha nagyobb az alkalmazás akkor pedig úgyis
CommonJS (pl browserify, webpack), AMD (requirejs), vagy ES6 lesz a befutó.
De ha írok egy funciót, ami egy másik funckióban van és vissza kell térnem valamivel, hogy publikus legyen az a metódus. Vagy nem?
Ezt sajnos nem tudtam értelmezni
-
Speeedfire
félisten
Az n+1-edik tutoriálban láttam hasonlót, ahol a namespace-eket előre felvette. Sok értelme nem hiszem, hogy van.
De ha írok egy funciót, ami egy másik funckióban van és vissza kell térnem valamivel, hogy publikus legyen az a metódus. Vagy nem?
Lehet nézegetnem kellene még a pattern-eket. Az a baj, hogy komplett alkalmazás pattern-t nem láttam még seholsem.
-
Jim-Y
veterán
válasz
Speeedfire #4426 üzenetére
Szia!
//namespace
(function(){
store.models = {};
store.routes = {};
store.utils = {};
store.viewModels = {};
})();Ennek semmi értelmét nem látom. El tudnád magyarázni, hogy miért kellett az iffy?
Lehet, hogy itt ezt láttad, hogy a this-t milyen jó is használni, és tényleg jó, ha valaki 100%-osan tudja, hogy mikor mit jelent, de az én személyes véleményem a témában, hogy amikor meg lehet kerülni az explicit this használatát, akkor érdemes mást használni helyette. Megjegyzem ezzel a szemlélettel nem vagyok egyedül. Rendkívül error-prone lesz tőle a kód.
-
Speeedfire
félisten
-
dqdb
nagyúr
For ciklusban az általad használt módon nem illik az innerHTML-hez hozzáadni tartalmat, ugyanis ilyenkor minden alkalommal a böngésző változást észlelve újrarendereli az oldalt. Egy változóba gyűjtsd össze a teljes változást, és egyszer nyúlj hozzá az innerHTML-hez. Szintén nem illik for ciklusban a DOM-ból lekérdezni állandóan egy objektumot, amikor azt a ciklus előtt cache-elhetted volna egy változóba.
function f()
{
var min = parseInt(document.getElementById("min").value);
var max = parseInt(document.getElementById("max").value);
var s = "";
var paddingLength = -max.length;
var paddingString = new Array(-paddingLength).join("0");
for (; min <= max; min++)
s += (paddingString + min).slice(paddingLength) + " | ";
document.getElementById("box").innerHTML = s;
} -
Aureal
őstag
Portolom a kérdést a html-es topicból...
Azt hogy lehetne megoldani, hogy az előbbi kódomban [link], ha a max értéke mondjuk százas vagy ezres nagyságrendű, akkor az egyes helyiértékeket 0-val töltse fel vmi ciklus? Nem bírok rájönni sehogy sem.
Pl: 001... 010... 100 vagy 0001... 0010... 0100... Arra gondoltam kérjem le az input value hosszát a document.getElementById('max').value.length kóddal. (?)
-
Jim-Y
veterán
válasz
martonx #4419 üzenetére
Ez strict mode violation.
> That means, among other things, that in browsers it's no longer possible to reference the window object through this inside a strict mode function.
-
martonx
veterán
-
norby10
csendes tag
Ismét ugyanazzal a kérdéssel jönnék csak másképp megfogalmazva!!
Tehát nekem van egy textfieldem egy űrlapon belül amiben 1 albummak fogom a nevét megadni majd alatta van egy jqueryis "Drop Here "os uploadoló rész és ennyi nincs semmi gomb amit megnyomok, hogy submit v valami...
Rövidre fogva, hogy kapom meg egy textfieldnek az értékét anélkül, hogy submitoljam a formot...
Remálem érthető voltam
-
martonx
veterán
válasz
Sk8erPeter #4409 üzenetére
Most fejből dobom ide, én ilyesmit szoktam használni:
function model() {
var self = this;//Ez privát
var privateApple;//Ez publikus
self.publicApple = "valami";//Ez privát
function privateTest(){
};//Ez publikus
self.publicTest(){
};return self;
};Így minden, amit a self-re felfűzök az publikus lesz. Ami meg nincs a self-en az privát. Szvsz ez az egyik legletisztultabb módszer. És persze ezt lehet megfűszerezni IIFE-vel, vagy Singleton pattern-nel, mikor melyik a célszerűbb.
-
Jim-Y
veterán
TL;DR
A lényeg, hogy ezek nem számítanak must-have tudásnak, de mindenképp érdemes őket elolvasni, tanulmányozni.Amiket a könyvben láttál, azokat nem kell mind készség szintjén tudni, a legtöbb amúgy is csak elméleti pattern, production kódban ritkán látsz olyanokat. De van pár amiket érdemes ismerni, mert azokat igenis használják élesben, és sok framework, library azokra épít.
A module pattern talán a legismertebb pattern, a revealing module pattern szintúgy, szerintem ismerni érdemes még a singleton pattern-t, a factory patternt, és egyszer már használtam a prototype pattern final változatának egyik változatát is
var beget = (function () {
function F() {}
return function ( proto ) {
F.prototype = proto;
return new F();
};
})();Tudtam, hogy nagyjából mit szeretnék csinálni (egy jQuery szerű libet létrehozni, nyílván minimal-t, de úgy hogy myLib(selector) adjon adja vissza a könyvtáramat.), és megnyitottam a pattern könyvet és kerestem valamit amire rá tudtam húzniaz elképzelésemet. Ez nálam a factory pattern volt, legalábbis az adta az ötletet,
Kb így kell elképzelni, hogy mi lett belőle
-
Jim-Y
veterán
válasz
Sk8erPeter #4409 üzenetére
Hehe, érdekes, hogy ami neked kaotikus, az nekem átlátható, és ami neked megfelelő, az számomra kaotikus. Wtf
Amúgy tényleg, ha legjobban körül szeretném írni, hogy számomra miért szimpatikusabb a "kódismétléses" verzió, akkor egész egyszerűen csak a tapasztalataimra tudnék hivatkozni. Ha van egy modulod amiben mondjuk van 40-50 függvény, ebből mondjuk 30 publikus, akkor azt a 30 publikusat a visszaadott objekt literalba tenniNem tudok fogalmazni basszus..
Na a lényeg, hogy sok függvény esetén az általad javasolt megoldás átláthatatlan kódot eredményez. Ha én mint fellow co-worker megnyitok egy új modult akkor nem akarok 1000 sort átscrollozni és úgy átnézni, hogy mik a modul publikus függvényei (publikus alatt a visszaadottakat értem). Helyette sokkal jobb, ha a modul végén van egy
return = {
egy: egy,
ketto: ketto,
stb: stb
};Egész egyszerűen átláthatóbb.
Require-ben is, ez a de-facto skeleton (ha jól tudom)
define('moduleName', ['deps'], function(dep) {
var module;
module = {
....
};
return module;
});Én nap-mint találkozom olyan modulokkal, na jó, pár modullal, ahol ha az össze method-body a return-be lenne behányva akkor a hajamat tépném.
Persze ha a modul csak pár függvényt tartalmaz, és azok is ilyen rövidek, akkor nyílván sokkal jobb az általad felvázolt verzió, ezt belátom én is. De egy 1500-2000 soros modulnál.. na ott szerintem ez már nem jó.
-
Zedz
addikt
És Ti mennyire használjátok ezeket a programozási technikákat? Úgy értem nap mint nap, vagy csak néha egyet-kettőt?
-
Speeedfire
félisten
A könyv végén azért ott van, amit kerestem.
var namespace = namespace || {};
// here a namespace object is passed as a function
// parameter, where we assign public methods and
// properties to it
(function( o ){
o.foo = "foo";
o.bar = function(){
return "bar";
};
})( namespace );
console.log( namespace );;(function ( namespace, undefined ) {
// private properties
var foo = "foo",
bar = "bar";
// public methods and properties
namespace.foobar = "foobar";
namespace.say = function ( msg ) {
speak( msg );
};
namespace.sayHello = function () {
namespace.say( "hello world" );
};
// private method
function speak(msg) {
console.log( "You said: " + msg );
};
// check to evaluate whether "namespace" exists in the
// global namespace - if not, assign window.namespace an
// object literal
})( window.namespace = window.namespace || {} ); -
Sk8erPeter
nagyúr
Bevallom, számomra ez a
function getName() {
return name;
}
return {
getName: getName
};illetve
function getName() {
return name;
}
self.getName = getName;pattern még mindig kaotikus - mi van, ha 30 metódusra van szükségem, 30-szor kell kódot ismételnem (self.getName = getName, self.tokmindegy = tokmindegy, stb.)?
Amúgy jelen esetben miért nem elég ez (kódismétlés nélkül)? --> http://jsfiddle.net/4sj41ku5/6/var App = (function() {
/**
* @private
*/
var name = 'My App';
return {
/**
* @public getter
*/
getName: function() {
return name;
}
};
}()); -
-
Jim-Y
veterán
válasz
Speeedfire #4404 üzenetére
Szia, csak siman rosszul hasznaltad.
Itt egy javitott verzio. [link]
Es mindjart linkelek megegyet, addig is, hasznos olvasmany. Addy Osmani - JavaScript Design Patterns
Egyebkent amit te is hasznalni probaltal, es amit en is linkeltem, az a Self Revealing Module Pattern ez egy eleg surun hasznalt pattern a tobbihez kepest.
Igy lehet levedni a kulso scope-bol jovo valtozokat. [link]
Új hozzászólás Aktív témák
Hirdetés
- Milyen videókártyát?
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Házimozi belépő szinten
- Kazy Computers vélemények - tapasztalatok
- GeForce RTX 5050 kártyák az MSI portfóliójából
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- exHWSW - Értünk mindenhez IS
- Milyen billentyűzetet vegyek?
- Milyen okostelefont vegyek?
- PlayStation 3
- További aktív témák...
- BESZÁMÍTÁS! Asus TUF B550M R7 5700X 16GB DDR4 512GB SSD RTX 3060 Ti 8GB Rampage SHIVA FSP 700W
- AKCIÓ! Intel Core i9 14900K 24 mag 32 szál processzor garanciával hibátlan működéssel
- Bomba ár! Lenovo X1 Yoga 2nd - i7-7G I 8GB I 256SSD I 14" WQHD I HDMI I W11 I CAM I Garancia!
- Bomba ár! Lenovo ThinkPad X260 - i5-6G I 8GB I 256GB SSD I 12,5" HD I HDMI I CAM I W10 I Gari!
- LG 48GQ900-B - 48" OLED - 4K 3840x2160 - 138Hz & 0.1ms - G-Sync - FreeSync - HDMI 2.1
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest