- VoLTE/VoWiFi
- Honor Magic6 Pro - kör közepén számok
- Android alkalmazások - szoftver kibeszélő topik
- Huawei Mate X6 - keleti oldal, nyugati oldal
- Honor 400 Pro - gép a képben
- Samsung Galaxy S24 FE - később
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Sony Xperia 1 V - kizárólag igényeseknek
- Google Pixel topik
- Netfone
-
Mobilarena
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
-
Most is tanultam valamit!
Még annyit szerettem volna kérdezni, hogyha alapból benne van a splittnél a tagben a pont, akkor hogy lehet azt megcsinálni, hogy karakternek tekintse?
(tudom ez nem megfelelő fogalmazás, de csak ahhpz tudnám hasonlítani, mint shellben a \ a "különleges" karakterek előtt)
-
martonx
veterán
Mondjuk ki nyugodtan, azért megy a szenvedés, mert a gyengén típusos nyelveknek nem tud olyan futási sebessége lenni, mint az erősen típusosaknak. Ráadásul (és ezért most megint meg fognak kövezni páran) az erősen típusos nyelvekben fejleszteni is jobb, bolond biztosabb (és itt most nem a Hello Wolrd komplexitású projektekre gondolok).
Ez utóbbin segít a typescript, Dart, coffescript, akármi, de az ezek által generált js, lehet, hogy még lassabban fut, mint a kézzel, szakértőként megírt.
Így aztán marad a szenvedés, hogy hogy lehetne valahogy elvinni az egész js-t erősen típusos irányba. -
Sk8erPeter
nagyúr
Elég vicces, hogy a cím teljesen ellentmond a tartalomnak:
"Assembly-szerű nyelv válthatja le a JavaScriptet a böngészőkben"
"Erre a problémára akar egy új megoldást kínálni a W3C egy új munkacsoportja, ami egy assembly-szerű nyelv értelemzőjének beépítését javasolja a modern böngészőkbe a JavaScript mellé."Már ez is kifejezi, hogy nem LEVÁLTÁSról van szó, hanem legfeljebb kiegészítésről. Meg is őrülnék, ha assembly-szerű nyelven kellene programozni kliensoldalon. Nem tudom, programoztatok-e már assembly-ben, hát szenvedjen vele az, akinek muszáj, vagy akinek van ilyen jellegű perverziója.
JavaScript MELLÉ komoly teljesítménynövekedés esetén nem hülyeség, de lehet, hogy ez is megmarad egy ilyen "volt róla szó"-projektnek, hacsak valaki nem tesz bele nagy lóvét, hogy nyomassa orrba-szájba. -
martonx
veterán
Nem, de a helyedben már kivárnám azt a két hónapot, és win10-es universal appban gondolkoznék. Vagy megírnám Androidra a cuccot, és átportolnám winre, így egy csapásra több milliárd potenciális usert szerezve.
Sőt akkor már valami normális nyelven állnék neki (C# hehe), mondjuk Xamarin-nal, és akkor IOS-en is futni fog az egész, így még további 1-2 milliárd usert szerezve, ráadásul ők a legfizetőképesebbek. -
PumpkinSeed
addikt
Ja, csak közbe haladnék is vele, mert le kell adni, de ilyen kis szépség hibák vannak benne.
(#5165) Sk8erPeter
Úgy értem, hogy egy snake-t kell csinálni, és a kígyó ha nekimegy a falnak akkor a másik oldalon kicsit beljebb jön be, meg ilyenek. Azért mondta, hogy játszani lehet a játékkal, csak csúnya, hogy nem ott jön be ahol kellene.
(#5166) Lortech
Tudom, hogy hol a hiba, de nincs most időm logikázni rajta, hogy ugyan mit is kellene odatenni, hogy az úgy működjön. De amúgy én is inkább szenvedek legtöbbször, hogy jó legyen és csak aztán lépek tovább.
-
Jim-Y
veterán
PR = Pull Request.
Az io.js-t ugy kepzeld el mint egy node-ot steroidokon
Ujabb V8 verzio van alatta ezaltal az uj fejlesztesek amiket a Google tesz a V8-ba es libuv-be (ez mar nem google) az hamarabb jut el hozzank, fejlesztokhoz. Pl ES6 meg par uj global API. iojs-hez is hasznalhatsz Mindent amit node-hoz.
-
Jim-Y
veterán
A Sailsjs-rol csak hallottam, tudom, hogy van ilyen de nem igazan tartom elterjedtnek. Ha nekem kene valamit hasznalnom MA, akkor biztos, hogy Express lenne, mert az a legismertebb, utana hapi vagy StrongLoop. Az io.js pedig nem olyan, hogy hasznald vagy sem, HASZNALD! Mindenki migral at az io-ra. Egyebkent is eloszor tedd fel az nvm-et es ezzel tedd fel a node/io-t. Az iojs es a node elobb-utobb ujra egyesulni fognak, de jelenleg az iojs-hez SOKKAL tobb PR erkezik.
-
Jim-Y
veterán
Szerintem node.js vonalon az Express a legismertebb, ez kb olyan mint az Angular (popularitasban) a frontenden. Meg a hapi.js amit ajanlani szoktak. Nekem egyikkel sincs komolyabb tapasztalatom, en eddig Restify-t hasznaltam ami egy express fork? talan, vagy ha nem akkor is kb ugyanaz csak sokkal lightweightebb.
-
Jim-Y
veterán
Hát, szerintem a bruttó havi félmilla az elég csekély, mármint én nem ennyit akarok majd keresni seniorként az tuti. És pl a LogMeIn-nél nem is ilyen fizuk vannak hanem inkább brutto 650-700 ahogy hallottam. A témához hozzászólva. Én JS devloperként tevékenykedem de pl formot nagyon nagyon ritkán kell írnom, egész egyszerűen szerintem azért, mert nálunk, és az itthoni projektjeimben is már ezer éve AJAX + REST-et használok nem pedig formokat. Aki pedig a klasszikus iskola híve, vagy legacy projekten dolgozik ott gondolom jó eséllyel van pl JSF ami -asszem- elfedi ezeket előled. Nem védeni akarom, szerintem bőven illett volna megcsinálnia, ha máshogy nem, AJAX-al vagy a googli segítségével
-
Cathfaern
nagyúr
Tény, de 2-3 éve nem írtam szerintem hagyományos formos submitot
Lehet ment volna fejből is, de lehet nem jut eszembe hogy action-nek hívják. Lehet rossz tulajdonság, de amit nem használok, viszont fél másodperc alatt googlizható, az nem szokott megmaradni a fejemben... (annó töri évszámokból is használhatatlan voltam, annak ellenére, hogy az anyag lényegét, meg ki hol mit, miután/mielőtt és miértet gond nélkül tudtam).
-
fordfairlane
veterán
-
martonx
veterán
Figyi, itt van egy-két egész életszerű kérdés, ahogy elkezdtem végigmenni rajtuk, simán volt köztük olyan, amin megfeküdtem. Pl. ez szerintem egész életszerű:
function foo1()
{
return {
bar: "hello"
};
}
function foo2()
{
return
{
bar: "hello"
};
}Ugyanazt adja-e vissza a két funkció?
Szerk, és a link, ahonnan vettem: [link]
-
Jim-Y
veterán
Nekem volt anno egy projektem ahol Angular-Dart-ot használtam, tehát nem nulláról indulok, hanem mondjuk 1-ről
Érdekesség, hogy az AngularDart nagyban hasonlít (így első ránézésre) az Angular 2.0-ra, ami amúgy NEM MEGLEPŐ. Az egyik podcastban úgy emlékszem említette is valaki, hogy az AngularDart team célja a googlenél pont ez volt, hogy az angularos újdonságokat ott próbálják ki. Tehát arra számítok, hogy ami az AngularDartban 1 évvel ezelőtt benne volt az most bekerül majd a 2.0-ba
-
Kommy
veterán
A lenyeg az lenne, hogy avnnak benne rejtett mezők és van egy select (csak ez látszik) és ha ezt változtatom akkor kén lekérnie a többi adatot is + a válsztottat. Ez nálam safari alatt működik tökéltésen de sem Chrome-ban sem firefoxban nem.
Amúgy egy url-t hív meg amiben az egyik "változó" eredménye a selectben választott érték.
-
martonx
veterán
Érdekes megfigyelni, hogy egyre több NodeJs-es rendszer is typescriptet használ. Jópofa dolog a típustalan nyelvekkel dolgozni, de komolyabb kódbázisnál hipp-hopp visszájára fordul a típustalanság (pontosítok: gyengén típusosság).
Mi a typescriptet tavaly év elején kipróbáltuk (volna) egy komolyabb projekten, de elég gyorsan kukáztuk. Ennek fő oka a megbízhatatlan fejlesztői eszközök voltak, illetve a projektünk ugyan komolyabb projekt volt, de akkor is csak UI (egyébként pont AngularJs mellé akartuk használni). Így azt vettük észre, hogy igazán érdemben nem sokat ad hozzá a projekthez, miközben az instabil tool-ok miatt elég sok volt a szívás vele.
Azóta a typescript is lépett három verziót (ha az 1.5-ös bétát is belevesszük), és ahogy más kollégáktól hallom, mostanra a tool-ok is sokat fejlődtek. Ettől függetlenül pusztán UI projekthez nem feltétlenül van értelme használni szerintem.
-
Jim-Y
veterán
Nekem igazabol pont ezert szimpatikusabb a React+Flux mint egy monolitikus fw, mert mig az utobbi mindenre tesz ajanlast, sot inkabb mindenre megmondja, hogy te ehhez ezt hasznald, es azt igy csinaldd, addig az utobbi esetben
react -> view layer. component based -> nagyon tetszik a komponenselvusege
flux -> single way dataflow. Ez nagzjabol az architektura kiepiteseben segit, es abban, hogy a komponenseim hogyan kommunikaljanakes ennyi.. semmi masra nem tesz megkotest sem javaslatot sem semmit. Valahogy fetchelni kene az adatokat a szerverrol? A felhasznalon mulik hogy mit hasznal hozza, XHR? vagy egy direkt erre specializalodott modult? Rajtad all. Kell valami data layernek? megint csak rajtad all, hogy ImmutableJS-t vagy Backbone-t vagy barmi mast hasznalsz. Ennek azert jo sok elonyei vannak a monolitikus frameworkokkel szemben mint az Angular vagy az Ember.
Hatrany, hogy a tanulasi gorbe talan meredekebb.
-
Jim-Y
veterán
Ehhez annyi kiegeszites, hogy a ReactJS (es tudom, hogy ezt te is tudod, csak felreertheto a dolog) nem egy kompetitiv framework, hanem csak egy lib. Pl vannak akik Angularral hasznalnak Reactot, de Reactot lehet Backbone-al is stb.. A lenyeg, hogy a React onmagaban csak egy V, A React+Flux igy egyutt ad ki egy majdnem frameworkot...
-
Jim-Y
veterán
De, a sima return-nek bőven van haszna, ugyanis a segítségével lehet idő előtt megszakítani a metódus interpretálását.
Ezek mind-mind ugyanazt eredményezik> (function(){ return void 0; })();
undefined
> (function(){ return; })();
undefined
> (function(){ return undefined; })();
undefined
> (function(){ return console.log('returned'); })();
returned
undefinedAnnyi, hogy az utolsó esetben egy kis "trükkhöz" folyamodunk, ezt általában node esetén használják, ugyanis ott van egy "error first"-nek nevezett stílus, így lettek a core modulok megírva. Ezt azt jelenti, hogy:
ORM.find({}, function successCallback(err, datas) {
if (err) {
console.error('Error happened, returning', err);
}
response.send(200, datas);
});Ez a példa hibás, ugyanis nem sikerült az adatbázisból való lekérdezés, hiba történt, így vissza kéne térni a függvényből, hogy a response.send ne futhasson le, ugyanis a datas adatoknak nincs értékük. Ezt kéne írni:
ORM.find({}, function successCallback(err, datas) {
if (err) {
console.error('Error happened, returning', err);
return;
}
response.send(200, datas);
});De az emberek sűrűn elfelejtik kiírni a return;-t így inkább ezt szokták javasolni:
ORM.find({}, function successCallback(err, datas) {
if (err) {
return console.error('Error happened, returning', err);
}
response.send(200, datas);
});==================================================
Amit a konzolban kaptál az pedig szerintem csakis annyiról szól, hogy az emberek ne a return false;-t használják az e.preventDefault() helyett.
-
Jim-Y
veterán
Szia, belinkeled légyszi, ahol ezt írták, hogy "elveszik a támogatottságát"? Furcsa lenne.. ez nem olyan amit ki lehet védeni.
Az event.preventDefault () és return false- ról egy csomó stackoverflow thread szól: pl, pl2
A return; így simán visszatér a hívóhoz egy undefined értékkel. JavaScriptben return-t írni a függvény végére azért nincs értelme, mert lexikálisan a záró kapcsos zárójel után amúgy is visszatér a vezérlés a hívóhoz, és JavaScriptben ha nincs explicit visszatérési érték megadva, akkor undefined lesz a visszatérési érték.
Egyébként ezzel a résszel nincs gond:
handleSubmit: function(e) {
e.preventDefault();
var author = this.refs.author.getDOMNode().value.trim();
var text = this.refs.text.getDOMNode().value.trim();
if (!text || !author) {
return;
}Egy eseménykezelőben sűrűn hívunk először egy prevDef-et, hogy a kilőtt event alapértelmezését felül tudjuk írni. A függvényből való vezérlésvisszaadás nem megfelelő értékek esetén is egy bevált gyakorlat.
-
Jim-Y
veterán
Na hat akkor en el is kezdenem rogton egy kerdessel.
Bevezetes: A Dart (dart2js) compiler automatikusan csinal tree shakinget, amit azert tud megtenni, mert a kod nem valtozik dinamikusan compile utan. Tehat pl classokhoz letrehozas utan nem lehet nyulni. Ezt egy nagyon jo dolognak tartom, marmint a tree shakinget, es azon gondolkoztam, hogy vajon van e mar ilyen javascripthez is.
Innen jutottam el a Google Closure Compilerhez. Kerdeznem, hogy van-e valakinek ezzel tapasztalata? Peldaul mennyire jo otlet a production build-be egy olyan lepest tenni, ami lefuttatja a bundle fajlt a g.c.c-en?! Production build alatt most nem munkahelyi kornyezetben levo prod buildet kell erteni, hanem mondjuk a sajat kis applikaciodnal, amikor csinalsz egy full dist-et, akkor mennyire lehet ennek letjogosultsaga? Ugy tudom, hogy egyreszt nem lehet akarmennyiszer hasznalni a g.c.c-t, illetve nem is a sajat gepeden fut, hanem talan a Cloudon?!
TreeShaking ~dead code elimination: Kiszuri a kododbol azokat a reszeket amikre nincs referencia, ezaltal optimalizaltabb kodot kapsz eredmenyul.
Udv,
Koszimegj: van egy standalone java alkalmazas is ra, ezt megtalatam kozben
-
Sk8erPeter
nagyúr
Ha adhatok egy tanácsot, ne az újításokkal kezdj foglalkozni, hanem sajátítsd el rendesen a JavaScript-alapokat, aztán mélyítsd a tudást olyan feladatokkal, amikkel hétköznapi feladatokat oldasz meg. Ne olyan dolgok megértésével kísérletezz kapásból, amikhez az is szükséges, hogy értsd az alapokat ahhoz, hogy értékelni tudd és értsd is az újdonságokat. Ha a relatíve stabil alap megvan, utána mehet a többi.
Szerintem Jim-Y tudása már elég speckó dolgokra terjed ki, sokszor már nekem is totál ismeretlen és új, amikről beszél.De Jim-Y kolléga a melója meg saját elhivatottsága miatt sokkal intenzívebben foglalkozik a JavaScripttel. Az, hogy honnan hova jutott ezen a területen, az egyébként szerintem elég példamutató, elég rendesen látszik a belefektetett energia.
Jim-Y: remélem elpirultál.
-
Jim-Y
veterán
Igen, bár azt nem tudom sajnos, hogy akkor attól kezdve, hogy a modulok támogatottak lesznek minden olyan böngészőn, amire fejleszteni szeretnénk, azok a toolok, amiket ma használunk modulokra bontásra, teljesen feleslegessé válnak-e vagy sem. Szerintem az igény akkor is meglesz arra, hogy összecsomagoljuk a fájlokat, de nyílván arra egy sima concat tool is elég lesz. Szóval
1: igen, ES6-ban lesz "natív" modul támogatás
2: nem, sajnos nem tudom, hogy ez a browserify, webpack, UMD, AMD toolokra milyen hatással lesz :/Annyi biztos, hogy nem most lesz, amikor ezeket biztonságosan el lehet majd hagyni
-
Jim-Y
veterán
Gondoltam megmutatom, hogy hogy működik a browserify, mert viszonylag egyszerűen be lehet mutatni:
Vannak a forrás fájlok:
.
├── app.js
├── index.html
├── module1.js
├── module2.js
└── node_modules
└── browserifymodule1
======='use strict';
module.exports.hello = function(world) {
return 'hello, ' + world();
};module2
======='use strict';
module.exports.world = function() {
return 'world!';
};app
==='use strict';
var module1 = require('./module1.js'),
module2 = require('./module2.js');
document.querySelector('body > div > p').innerText = module1.hello(module2.world);Majd itt használjuk fel a browserify-t egy bundle készítésre, terminálban a gyökér könyvtárban ki kell adni ezt a parancsot:
browserify app.js > bundle.js
index.html
========<!DOCTYPE html>
<head>
<title>Browserify</title>
</head>
<body>
<div>
<p></p>
</div>
<script src="bundle.js"></script>
</body>
</html>Tehát a html-be már csak a bundle-t húzzuk be, illetve a webszerverre/CDN-re is már csak a bundle-t kell feltenni.
A bundle pedig ezt tartalmazza:
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';
var module1 = require('./module1.js'),
module2 = require('./module2.js');
document.querySelector('body > div > p').innerText = module1.hello(module2.world);
},{"./module1.js":2,"./module2.js":3}],2:[function(require,module,exports){
'use strict';
module.exports.hello = function(world) {
return 'hello, ' + world();
};
},{}],3:[function(require,module,exports){
'use strict';
module.exports.world = function() {
return 'world!';
};
},{}]},{},[1]);Sok-sok olvashatatlan dolog, de látszik, hogy végső soron a te fájlaidat rakja össze.
Üdv -
-
Jim-Y
veterán
Ha az ES6-ra gondolsz, akkor úgy vélem, hogy az elterjedése folyamatos, és csak a projekt karakterisztikái határozzák meg, hogy már ma is használhatod-e, vagy sem. Például ha olyan a projekt, hogy folyamatos buildelést kíván, mert például browserify-t, vagy webpacket használsz, akkor akár már most is használhatsz olyan eszközöket, mint a 6to5, vagy a Traceur, és szerintem ilyen esetben ajánlott is használni valamit. Én például mostanában React-os projeketeket csinálok, browserify-t használok, kifejezetten ES6 to ES5 transpilerem nincs, de a reactify miatt van 1-2 ES6-os feature amit "ingyen" megkapok. Ezeket előszeretettel használom már most is.
Szóval, 100%-os támogatottságra még biztos várni kell, szerintem minimum egy évet, de a migráció folyamatos a vendorok részéről, így az idő előre haladtával mind több és több ES6-os feature-t lehet használni.
megj: illetve mivel az iojs ilyen jó ES6 támogatottsággal rendelkezik, ezért szerver oldalon már ma is lehet használni az újdonságokat.
-
Jim-Y
veterán
Hat nezd, en nem jelentenem ki, igy egyertelmuen, hogy az egyik jobb, mint a masik, szerintem nem is lehet. Ez csak egy alternativ fejlesztesi modszer az imperativ programozas mellett. Mig az imperativ modszertanoknal a kozponti szerep az adatokon van. Az adatoknak objektumokat feleltetunk meg, az objektumok letrehozasara osztalyokat definialunk, az objektumokon muveleteket is definialunk, addig a funkcionalis programozasnal a kozponti szerep a fuggvenyeken van, es az adatok es a fuggvenyek kozott laza csatolas van. Hogy a fenti mondat, es a leirt kulonbseg miert jo, az talan nem is olyan egyertelmu. Hozza kell meg venni a kephez, hogy FP-ben az adatok nem valtoztathatok, tehat immutable adatokkal dolgozunk. Az OOP pedig arra epul, hogy az adat allapotat (state) valtoztatjuk. Pl egy objektum belso allapotan az egyik peldanymetodussal valtoztatunk. Ezek a kulonbsegek itt is fel vannak sorolva [link] bar elhiszem, hogy meg ennyitol nem lesz vilagos, hogy miert kene kis FP-t is tanulni. Nezzuk tovabb
En sajat reszrol ezeket a szempontokat tartom fontosnak, hogy miert erdemes kicsit (tenyleg csak picit) megnezni az FP-t.
* JavaScriptben mar alapbol vannak olyan paradigmak, amik az FP alapjat kepezik.
-> functions first class citizens
-> higher order functions
-> anonymous functions + closures* Amikre mar vannak lehetosegeink
-> Immutability, pl Immutable vagy Mori
-> Pure functions
-> ES5 array methods (immutability)* JavaScriptben, foleg webes kornyezetben erdemes rovid, tomor fuggvenyeket irni, hogy tehermentesitsuk az event loopot/egyetlen stacket. Tehat ez amugy is egy olyan stilust eredmenyez amiben sok kis fuggvenyunk lesz, amit sokszor adunk at parameterben, sokszor hivjuk meg oket, stb..
Nagyjabol ezek adjak ki, hogy erdemes ismerni az FP-ben rejlo lehetosegeket. Ejj, sajnos en sem vagyok penge a temaban, igy nem tudom jol leirni, sem azt amit akarok, sem azt, hogy miert lenne jo igy programozni, ezert most csak par kosza gondolatot irok meg igy a vegere vitainditonak
immutability -> konkurrens problemak megoldasara
immutability -> easy undo/redo es state management
curryzes -> tomorebb, rovidebb, bizonyos esetekben olvashatobb kodot eredmenyezTehat, az FP sem jobb, mint az OOP, csak mas. Ha megnezed a tisztan objektum orientalt nyelvek is nyitnak az FP-s paradigmak fele, mint a Java is a 8-as verziojaval, ahol pedig mar az FP-s cuccok eddig is megvoltak, pl JS, ott pedig az OOP-s paradigmak fele, lasd ES6 class syntax, ami egyebkent meg mindig prototipusos, csak OOP-s kontosben.
Szerintem ezert nem szabad megrekedni az OOP-nel es ismerni kell az alternativakat is. Illetve nekem tetszik, ha a ket stilust otvozzuk.
Plusz egy link: Ramda
-
Sk8erPeter
nagyúr
Na várj, a kérdéseidből ítélve úgy látom, hogy az objektumorientáltságnak az alapjaival sem vagy még (eléggé) tisztában, szóval jobban utána kéne olvasnod az OOP-nek (meg annak, hogy mondjuk miért jó, ha valamiből több példányod is lehet), most végül is mindegy, melyik nyelven, bár az is igaz, hogy erre pont nem a JavaScriptet tartanám a legjobb nyelvnek...
Egyébként amiről te beszélsz, az kb. annak felel meg, hogy van egy osztályod, statikus attribútumokkal és metódusokkal, amiket példányosítás nélkül meg tudsz hívni, és babrálsz velük.
Ezekre is bőven van példa magában a JavaScriptben is. De ha több különálló példányt is szeretnél létrehozni, mert azokat külön szeretnéd kezelni, akkor ez már nem elég."jQuerynél miért kell azt példányosítani?"
A példányosításnak semmi köze nincs a jQuery-hez. Erre is a válasz az, hogy nézz utána, miért jó bármiből is több példányt létrehozni. -
Sk8erPeter
nagyúr
"ahogy így belegondoltam majdnem mindenre elég a sima object literal"
Dehogy elég. Az object literal pont egy elég rossz példa volt. Például kapásból ha értelmesen szeretnél több példányt létrehozni klónozások, meg mindenféle baromkodások nélkül, akkor máris korlátokba ütköztél. Mi engedett arra a következtetésre jutni, hogy "majdnem mindenre elég"?Az előző lapon amúgy rengeteg szó volt az objektumorientált dolgokkal kapcsolatos témákról, kb. ezt a tartományt nézd (na meg nyilván az összefoglalót):
http://prohardver.hu/tema/javascript_topic/hsz_4404-4560.html -
Jim-Y
veterán
Pedig sok helyen használják őket, csak lehet te még nem találkoztál velük, magadtól írni pedig valószínűleg még annyira sem.
A JavaScriptet nem csak honlapfejlesztésre használják. A tapasztalaton szerint ha valaki eddig csak a webfejlesztéssel került kapcsolatba akkor elképzelhető, bár érdekes, hogy nem látott még ilyenre példát. De más területeken, ahol JS-t használnak sűrűn elő szokott fordulni. Mondok pár példát:
- Grafika/Játékok: canvas, például kell csinálnod egy Pont osztályt. Vagy egy lövedék osztályt, vagy bármit. Sűrűn előfordul.
- IoT/Nodebots: Johnny-Five | Led class
- jQuery: maga a jQuery is csak egy osztály egy objektuma https://github.com/jquery/jquery/blob/master/src/core.js#L23
- A Promis libek is használják, stb.. QEnnél jobb példák, amik nem az ilyen alap tutorial szintű példák most nem jutnak eszembe
-
superboyka
csendes tag
az elején azért csak azt a részét másoltam be amelyiken alakitani kellene a többinek semi köze a problémához szoval csak az ünepek részébe kell elméletileg alakitani amit utoljára bemásoltam csak azért lásad nem jó az a megoldás amit adtál , inkáb magyarázat kellene nekem mivel mondtam nem sokat értek a js hez .
-
superboyka
csendes tag
hát én probáltam de ugy össze van keverve html css nem tudtam széjel szedni figyeld a teljes kod amibe névnap is van
<?php
opentable("Karácsony Visszaszámláló");
/* scriptekbõl felépített panel */
?>
<style type="text/css">
/* */
#sapka{width:100%;
font-family:sans-serif;font-size:14px;color:#111F10;text-align:center;}
.current-submenu{width:800px;font-weight:700;height:345px;text-align:center;margin:0 auto;padding:4px 0 0 0;
font-size:16px;;border:0 solid #c6ac6c;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px;
background: #E1DFD5;font-family:Insula, Arial, helvetica, sans-serif;
background-image:-webkit-linear-gradient(left,#938B66, #E1DFD5, #938B66);
background-image:-moz-linear-gradient(left,#938B66, #E1DFD5, #938B66);
background-image:-o-linear-gradient(top left,#938B66, #E1DFD5 50%,#938B66 100%);
-pie-background:linear-gradient(left, #938B66, #E1DFD5, #938B66);
behavior:url('infusions/nevunep_panel/pie.htc');z-index:2;}
#unnep_keret{width:800px;min-height:10px;height:auto;margin:0 auto;padding:0;position:relative;}
#unnep{width:800px;margin:0;padding:0;position:absolute;left:0;top:0; background: url('infusions/nevunep_panel/orange50.png') 0 0 repeat;
-moz-border-radius:8px;-webkit-border-radius:8px;-o-border-radius:8px;-ms-border-radius:8px;
border-radius:8px;border:0px solid blue;behavior:url('infusions/nevunep_panel/pie.htc');}
#unnep div{width:797px;margin:0 auto;padding:0;color:#FFFFFF;font-family:Insula, Arial, helvetica, sans-serif;
height:30px;line-height:30px;font-size:18px;background: url('infusions/nevunep_panel/unnep.gif') 0 0 repeat;
-moz-border-radius:8px;-webkit-border-radius:8px;-o-border-radius:8px;-ms-border-radius:8px;
border-radius:8px;border:0px solid gray;behavior:url('infusions/nevunep_panel/pie.htc');}
</style>
<div id="sapka"><div id="sapka">
<script type="text/javascript">
/**************** aktuális dátum/névnap meghatározó *************/
var ido = new Date();
var ev = ido.getYear();
var ho = ido.getMonth();
var nap = ido.getDate();
var napszam = ido.getDay();
var honap_hossz = 0;
if (ev<1900)
{ ev+=1900; }
//hónap nevének meghatározása
function honev(ho)
{
var month = new Array("Január", "Február", "Március", "Április", "Május", "Június",
"Július", "Augusztus", "Szeptember", "Október", "November", "December");
return month[ho];
}
//nap nevének meghatározása
function napnev(szam)
{
var napnevek = new Array("vasárnap", "hétfo", "kedd", "szerda", "csütörtök",
"péntek", "szombat", "vasárnap");
return napnevek[szam];
}
//adott napon lévo névnapok meghatározása
function nevnap(evben,hoban,napon) {
if (hoban==1) { //Január
var napok = new Array("",
"Alpár, Fruzsina, Bazil", "Ábel, Gergely, Vazul", "Genovéva, Gyöngyvér, Benjámin, Dzsenifer", "Titusz, Leona, Angéla", "Simon, Emília",
"Gáspár, Menyhért, Boldizsár", "Attila, Ramóna, Rajmund, Bálint", "Gyöngyvér, Szeverinusz, Szörény", "Marcell, Juliánusz", "Melánia, Vilmos, Vilma",
"Ágota, Honoráta", "Erno, Erneszta, Tatjána", "Veronika, Csongor, Yvett", "Bódog, Félix", "Lóránt, Loránd, Pál",
"Gusztáv, Marcell", "Antal, Antónia", "Margit, Piroska", "Sára, Márta, Márió", "Fábián, Sebestyén",
"Ágnes, Agnéta", "Vince, Artúr", "Zelma, Rajmund, Emerencia, Emese", "Timót, Ferenc", "Pál, Henrik",
"Vanda, Paula, Timóteusz", "Angéla, Angelika", "Károly, Karola, Tamás", "Adél, Valér", "Martina, Gerda, Jácinta",
"Marcella, János");
}
else if (hoban==2) { //Február
if((evben%4 == 0 && evben%100 != 0) || evben%400 == 0)
{
var napok=new Array("",
"Ignác, Brigitta, Kincso", "Karolina, Karola, Aida", "Balázs, Oszkár, Celerina", "Ráhel, Csenge, Veronika, András", "Ágota, Ingrid, Etelka, Léda",
"Dorottya, Dóra, Pál", "Tódor, Rómeó, Richárd", "Aranka, Jeromos", "Abigél, Alex, Apollónia", "Elvira",
"Bertold, Marietta", "Lívia, Lídia, Eulália", "Ella, Linda, Levente, Katalin", "Bálint, Valentin, Cirill, Metód", "Kolos, Györgyi, Georgina",
"Julianna, Lilla, Filippa", "Donát", "Bernadett, Simon, Zenko", "Zsuzsanna, Eliza, Konrád", "Aladár, Álmos, Leó",
"Eleonóra, Zelmira, Péter", "Gerzson, Margit", "Alfréd, Polikárp", "SENKI SEM(szökonap)", "Mátyás, Jázmin",
"Géza, Cézár, Vanda", "Edina, Viktor, Gyozo", "Ákos, Bátor, Gábor", "Elemér, Oszvald, Román")
}
else
{
var napok=new Array("",
"Ignác, Brigitta, Kincso", "Karolina, Karola, Aida", "Balázs, Oszkár, Celerina", "Ráhel, Csenge, Veronika, András", "Ágota, Ingrid, Etelka, Léda",
"Dorottya, Dóra, Pál", "Tódor, Rómeó, Richárd", "Aranka, Jeromos", "Abigél, Alex, Apollónia", "Elvira",
"Bertold, Marietta", "Lívia, Lídia, Eulália", "Ella, Linda, Levente, Katalin", "Bálint, Valentin, Cirill, Metód", "Kolos, Györgyi, Georgina",
"Julianna, Lilla, Filippa", "Donát", "Bernadett, Simon, Zenko", "Zsuzsanna, Eliza, Konrád", "Aladár, Álmos, Leó",
"Eleonóra, Zelmira, Péter", "Gerzson, Margit", "Alfréd, Polikárp", "Mátyás, Jázmin", "Géza, Cézár, Vanda",
"Edina, Viktor, Gyozo", "Ákos, Bátor, Gábor", "Elemér, Oszvald, Román")
}
}
else if (hoban==3) { //Március
var napok=new Array("",
"Albin, Albina, Leonita, Lea", "Lujza, Ágnes, Henrik, Magor", "Kornélia, Kunigunda, Frigyes", "Kázmér, Lúciusz, Zorán", "Adorján, Adrián",
"Leonóra, Inez, Koletta", "Tamás, Perpétua, Felicitász", "János, Zoltán, Apolka", "Franciska, Fanni", "Ildikó, Emil, Gusztáv",
"Szilárd, Tímea, Konstantin", "Gergely, Maximilián", "Krisztián, Ajtony, Egyed, Patrícia", "Matild, Matilda, Trilla", "Kristóf, Kelemen",
"Henrietta, Herbert", "Gertrúd, Patrik", "Sándor, Ede, Cirill", "József, Bánk", "Klaudia, Alexandra",
"Benedek, Bence, Miklós", "Beáta, Izolda, Lea", "Emoke, Botond, Ottó, Kartal", "Gábor, Karina", "Irén, Írisz, Lúcia",
"Emánuel, Emánuéla, Larissza, Árpád", "Hajnalka, Lídia, Auguszta", "Gedeon, Johanna", "Auguszta, Bertold", "Zalán",
"Árpád, Benjámin, Beno")
}
else if (hoban==4) { //Április
var napok=new Array("",
"Hugó, Agád", "Áron, Ferenc", "Buda, Richárd, Hóvirág, Indira", "Izidor", "Vince, Irén, Teodóra",
"Vilmos, Bíborka, Taksony, Celesztin", "Herman, János", "Dénes, Valér, Valter", "Erhard, Ákos, Döme", "Zsolt, Ezekiel",
"Leó, Szaniszló, Glória", "Gyula, Baldvin, Sába", "Ida, Márton, Hermina", "Tibor", "Anasztázia, Tas, Oktávia",
"Csongor, Bernadett", "Rudolf, Izidóra", "Andrea, Ilma, Apolló, Aladár", "Emma, Malvin, Zseraldina", "Tivadar, Tihamér, Töhötöm",
"Konrád, Zelmira, Anzelm", "Csilla, Noémi, Kájusz", "Béla, Adalbert", "György, Fidél, Debóra", "Márk, Ányos",
"Ervin, Klétusz", "Zita, Mariann, Anasztáz", "Valéria, Péter", "Péter, Katalin, Roberta", "Katalin, Kitti, Zsófia, Piusz")
}
else if (hoban==5) { //Május
var napok=new Array("",
"Fülöp, Jakab, Zsaklin, Jefte, József", "Zsigmond, Atanáz, Zoé", "Tímea, Irma, Jakab, Fülöp", "Mónika, Flórián", "Györgyi, Irén",
"Ivett, Frida, Judit, Yvett", "Gizella, Gusztáv, Bendegúz", "Mihály, Gyozo", "Gergely, Katinka, Alberta, Édua", "Ármin, Pálma, Izidor",
"Ferenc", "Pongrác", "Szervác, Imola, Imelda", "Bonifác, Gyöngyi", "Zsófia, Szonja, Döníz",
"Mózes, Botond, János", "Paszkál, Ditmár, Rezeda", "Erik, Alexandra, János", "Ivó, Iván, Milán", "Bernát, Bernardin, Felícia",
"Konstantin, András", "Júlia, Rita, Emil", "Dezso, Vilmos, Renáta", "Eszter, Eliza, Vanessza", "Orbán, Gergely",
"Fülöp, Evelin", "Hella, Pelbárt, Ágoston", "Emil, Csanád, Vilmos", "Magdolna, Magda, Ervin, Léna", "Janka, Zsanett, Johanna, Nándor",
"Angéla, Petronella")
}
else if (hoban==6) { //Június
var napok=new Array("",
"Tünde, Jusztinusz", "Kármen, Anita, Péter, Marcellinusz", "Klotild, Cecília, Károly", "Bulcsú, Kerény, Kerubin", "Fatime, Fatima, Bonifác",
"Norbert, Norberta, Cintia", "Róbert, Robertina, Arianna, Fülöp, Roberta", "Medárd, Helga", "Félix, Elod, Annamária, Annabella", "Margit, Gréta",
"Barnabás", "Villo, Orfeusz, Adelaida", "Antal, Anett", "Vazul, Elizeus, Herta", "Jolán, Vid, Viola",
"Jusztin, Jusztina, Auréliusz", "Laura, Alida, Alina, Szabolcs, Adolf, Bató", "Arnold, Levente, Doloróza", "Gyárfás, Romuald", "Rafael, Dina",
"Alajos, Leila", "Paulina, Tamás", "Zoltán, Szultána", "János, Iván", "Vilmos, Viola, Vilma",
"János, Pál, Cirill", "László, Sámson", "Levente, Irén, Iréneusz", "Péter, Pál,Emoke, Judit, Petra, Szulamit, Ivett", "Pál")
}
else if (hoban==7) { //Július
var napok=new Array("",
"Tihamér, Annamária, Olivér, Áron", "Ottó", "Kornél, Soma, Tamás", "Ulrik, Erzsébet", "Emese, Sarolta, Lotti, Antal",
"Csaba, Mária", "Apollónia, Vilibald, Bene", "Ellák, Edgár, Eperke", "Lukrécia, Veronika, Hajnalka", "Amália, Melina Engelbert, Ulrika",
"Nóra, Lili, Nelli, Benedek", "Izabella, Dalma, Eleonóra", "Jeno, Henrik", "Örs, Stella, Kamil", "Örkény, Henrik, Roland, Bonaventúra",
"Valter, Irma", "Endre, Elek, András", "Szömér, Frigyes, Milla, Hedvig, Mirkó", "Emília", "Illés, Margaréta",
"Dániel, Daniella, Lorinc", "Magdolna, Mária, Magda", "Lenke, Brigitta, Apollinár", "Kinga,Kunigunda, Kincso, Krisztina", "Kristóf, Jakab",
"Anna, Anikó, Joakim", "Olga, Liliána, Natália, Pantaleon", "Szabolcs, Alina, Ince, Gyozo", "Márta,Flóra", "Judit, Xénia, Péter",
"Oszkár, Ignác, Bató")
}
else if (hoban==8) { //Augusztus
var napok=new Array("",
"Boglárka,Nimród, Alfonz", "Lehel", "Hermina, Lídia, Kamélia", "Domonkos, Dominik, János, Dominika", "Krisztina",
"Berta, Bettina", "Ibolya", "László, Domonkos", "Emod, Román", "Lorinc, Blanka, Csilla",
"Zsuzsanna, Tiborc, Klára", "Klára, Hilária, Diána", "Ipoly, Ince, Vitália", "Marcell, Maximilián", "Mária",
"Ábrahám, Rókus", "Jácint, Réka, Hetény", "Ilona, Rajnald", "Huba, Marián, Emília", "István, Bernát",
"Sámuel, Hajna, Piusz", "Menyhért, Mirjam", "Bence, Róza, Szidónia", "Bertalan, Aliz, Detre", "Lajos, Patrícia",
"Izsó, Tália, Natália, Zamfira", "Gáspár, Mónika", "Ágoston, Mózes", "Beatrix, Erna", "Rózsa, Félix, Letícia",
"Erika, Bella, Arisztid")
}
else if (hoban==9) { //Szeptember
var napok= new Array("",
"Egyed, Egon, Noémi, Tamara", "Rebeka, Dorina, Renáta, Ingrid, István", "Hilda, Gergely", "Rozália, Róza, Ida", "Viktor, Lorinc, Ofélia",
"Zakariás, Beáta", "Regina", "Mária, Adrienn", "Ádám, Péter", "Nikolett, Hunor, Miklós",
"Teodóra, Jácint, Igor, Helga", "Mária, Irma", "Kornél, János", "Szeréna, Roxána", "Eniko, Melitta",
"Edit, Ciprián", "Zsófia, Róbert", "Diána, József", "Vilhelmina, Januáriusz, Dorián", "Friderika",
"Máté, Mirella, Jónás", "Móric, Tamás", "Tekla, Líviusz, Ila", "Gellért, Gerda, Mercédesz", "Eufrozina, Kende",
"Jusztina, Kozma, Damján", "Adalbert, Vince", "Vencel, Salamon", "Mihály, Gábor, Rafael Mirabella", "Jeromos, Honória, Hunor")
}
else if (hoban==10) { //Október
var napok= new Array("",
"Malvin, Teréz", "Petra, Örs", "Helga, Évald", "Ferenc, Hajnalka", "Aurél, Placid, Attila",
"Brúnó, Renáta, Renátó", "Amália, Bekény", "Koppány, Benedikta", "Dénes, János", "Gedeon, Ferenc, Bendegúz",
"Brigitta, Placida, Etel, Gitta", "Miksa, Rezso, Edvin", "Kálmán, Ede, Edvárd", "Helén, Kaldixtusz", "Teréz, Aranka",
"Gál, Margit, Hedvig", "Hedvig, Ignác, Rudolf", "Lukács, Jusztusz", "Nándor, János, Pál", "Vendel, Irén, Kleopátra",
"Orsolya, Zsolt", "Elod, Szalóme, Kordélia", "Gyöngyvér, János, Gyöngyi", "Salamon, Antal", "Blanka, Bianka, Mór",
"Dömötör, Armand, Örs", "Szabina, Antonietta", "Simon, Szimonetta, Szimóna, Júdás, Tádé", "Nárcisz, Melinda, Ozike", "Alfonz, Zenóbia",
"Farkas, Rodrigó, Wolfgang")
}
else if (hoban==11) { //November
var napok=new Array("",
"Marianna", "Achilles, Bató", "Gyozo, Márton", "Károly, Karola", "Imre, Zakariás, Tétény",
"Lénárd, Krisztina", "Csenger, Rezso, Erno, Florentin", "Zsombor, Kolos, Gottfrid", "Tivadar", "Réka, András, Leó",
"Márton, Atád, Tódor", "Jónás, Renátó, Jozafát", "Szilvia, Szaniszló", "Aliz, Vanda, Huba, Klementina", "Albert, Lipót",
"Ödön, Margit", "Hortenzia, Gergo, Dénes", "Jeno", "Erzsébet, Zsóka", "Jolán, Zsolt, Ödön, Bódog",
"Olivér", "Cecília, Filemon", "Kelemen, Klementina, Kolumbán", "Emma, Flóra, Virág", "Katalin, Liza, Katinka",
"Virág, Szvetlana, Konrád, Viktória, Milos", "Virgil, Virgínia", "Stefánia, Jakab", "Taksony, Ilma, Filoména", "András, Andor, Andrea")
}
else if (hoban==12) { //December
var napok=new Array("",
"Elza, Natália, Blanka, Bonita", "Melinda, Vivien, Aranka", "Ferenc, Olívia", "Borbála, Barbara, János", "Vilma, Ünige, Csaba",
"Miklós, Csinszka, Gyopár, Gyopárka", "Ambrus, Ambrózia", "Mária, Emoke", "Natália, Valéria, Filótea", "Judit, Loretta, Eulália",
"Árpád, Árpádina, Damazusz", "Gabriella, Johanna, Franciska", "Luca, Otília, Lúcia, Éda, Tilia", "Szilárda, Szilárd, János", "Valér, Detre",
"Etelka, Aletta, Adelaida", "Lázár, Olimpia", "Auguszta, Gracián", "Viola, Anasztáz", "Teofil, Liberátusz",
"Tamás, Péter", "Zénó, Flórián", "Viktória, János", "Ádám, Éva, Adél", "Eugénia, Anasztázia",
"István", "János, Teodor", "Kamilla, Apor", "Tamás, Tamara", "Dávid, Hunor, Libériusz",
"Szilveszter, Donáta")
}
honap_hossz = napok.length;
return napok[napon];
}
//dátum(év, honapnév, nap, napnév), mai névnap, holnapi névnap meghatározás
var nevnapok=new Array()
nevnapok[0]='Ma "'+ev+'. '+honev(ho)+'. '+ nap+'" '+napnev(napszam)+' van...';
nevnapok[1]='A mai napon "' + nevnap(ev,(ho+1),nap) + '" ünnepli névnapját.';
if( (honap_hossz-1) == nap)
{
if( (ho+1) == 12)
nevnapok[2]='Holnap "' + nevnap(ev,1,1) + '" ünnepli névnapját.';
else
nevnapok[2]='Holnap "' + nevnap(ev,(ho+2),1) + '" ünnepli névnapját.';
}
else
nevnapok[2]='Holnap "' + nevnap(ev,(ho+1),nap+1) + '" ünnepli névnapját.';
//dátum, mai névnap, holnapi névnap váltás
function nevnapvalto(content, divId, divClass, delay, fadeornot)
{
this.content=content;
this.tickerid=divId;
this.delay=delay;
this.mouseoverBol=0;
this.pointer=1;
this.opacitystring=(typeof fadeornot!="undefined")? "width: 100%; filter:progid:DXImageTransform.Microsoft.alpha(opacity=100); -moz-opacity: 1" : "";
if (this.opacitystring!="")
this.delay+=500;
this.opacitysetting=0.2;
document.write('<div id="'+divId+'" class="'+divClass+'"><div style="'+this.opacitystring+'">'+nevnapok[0]+'<\/div><\/div>');
var instanceOfTicker=this;
setTimeout(function(){instanceOfTicker.initialize()}, delay);
}
nevnapvalto.prototype.initialize=function()
{
var instanceOfTicker=this;
this.contentdiv=document.getElementById(this.tickerid).firstChild;
document.getElementById(this.tickerid).onmouseover=function(){instanceOfTicker.mouseoverBol=1};
document.getElementById(this.tickerid).onmouseout=function(){instanceOfTicker.mouseoverBol=0};
this.rotatemsg();
}
nevnapvalto.prototype.rotatemsg=function()
{
var instanceOfTicker=this;
if (this.mouseoverBol==1)
setTimeout(function(){instanceOfTicker.rotatemsg()}, 100);
else
{
this.fadetransition("reset");
this.contentdiv.innerHTML=this.content[this.pointer];
this.fadetimer1=setInterval(function(){instanceOfTicker.fadetransition('up', 'fadetimer1')}, 100);
this.pointer=(this.pointer<this.content.length-1)? this.pointer+1 : 0;
setTimeout(function(){instanceOfTicker.rotatemsg()}, this.delay);
}
}
nevnapvalto.prototype.fadetransition=function(fadetype, timerid)
{
var contentdiv=this.contentdiv;
if (fadetype=="reset")
this.opacitysetting=0.2;
if (contentdiv.filters && contentdiv.filters[0])
{
if (typeof contentdiv.filters[0].opacity=="number") //IE6+
contentdiv.filters[0].opacity=this.opacitysetting*100;
else //IE 5.5
contentdiv.style.filter="alpha(opacity="+this.opacitysetting*100+")";
}
else
if (typeof contentdiv.style.MozOpacity!="undefined" && this.opacitystring!="")
{ contentdiv.style.MozOpacity=this.opacitysetting; }
else
this.opacitysetting=1;
if (fadetype=="up")
this.opacitysetting+=0.2;
if (fadetype=="up" && this.opacitysetting>=1)
clearInterval(this[timerid]);
}
/************** ÜNNEPEK ***************/
function unnepek()
{
var unnep_idoszak = false;
var today = new Date();
var theoccasion1 = new Date(parseInt(today.getFullYear()), 12, 25);
var mikulas_nap = new Date(parseInt(today.getFullYear()), 12, 6);
if(parseInt(today.getMonth())==11)
{
var theoccasion2 = new Date(parseInt(today.getFullYear()+1), 1, 1);
var theoccasion3 = new Date(parseInt(today.getFullYear()+1), 1, 8);
}
else
{
var theoccasion2 = new Date(parseInt(today.getFullYear()), 1, 1);
var theoccasion3 = new Date(parseInt(today.getFullYear()), 1, 8);
}
mikulas_nap.setMonth(theoccasion1.getMonth()-1);
theoccasion1.setMonth(theoccasion1.getMonth()-1);
theoccasion2.setMonth(theoccasion2.getMonth()-1);
theoccasion3.setMonth(theoccasion3.getMonth()-1);
var one_day = 1000*60*60*24;
calculate_mikulas_nap = Math.ceil((parseInt(mikulas_nap.getTime())-parseInt(today.getTime()))/(one_day));
calculatediff1 = Math.ceil((parseInt(theoccasion1.getTime())-parseInt(today.getTime()))/(one_day));
calculatediff2 = Math.ceil((parseInt(theoccasion2.getTime())-parseInt(today.getTime()))/(one_day));
calculatediff3 = Math.ceil((parseInt(theoccasion3.getTime())-parseInt(today.getTime()))/(one_day));
if (calculate_mikulas_nap < 0)
{
var nextyeartoday=new Date();
nextyeartoday.setFullYear(today.getFullYear()+1);
calculate_mikulas_nap = Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculate_mikulas_nap);
}
if (calculatediff1 < 0)
{
var nextyeartoday=new Date();
nextyeartoday.setFullYear(today.getFullYear()+1);
calculatediff1 = Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculatediff1);
}
if (calculatediff2 < 0)
{
var nextyeartoday=new Date();
nextyeartoday.setFullYear(today.getFullYear()+1);
calculatediff2 = Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculatediff2);
}
if (calculatediff3 < 0)
{
var nextyeartoday=new Date();
nextyeartoday.setFullYear(today.getFullYear()+1);
calculatediff3 = Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculatediff3);
}
//nov.22-tól dec.5-ig
if ( (calculate_mikulas_nap>0) && (calculate_mikulas_nap<15) )
{
document.getElementById('unnep').innerHTML = '<br \/><div>Még '+calculate_mikulas_nap+' napot alszunk és jön a Mikulás...<\/div>'+
'<br \/><img src="infusions/nevunep_panel/jon_mikulas.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//dec.6-án
if ( (calculate_mikulas_nap==0) )
{
document.getElementById('unnep').innerHTML = '<br \/><div>Gyerekek, megérkezett a Mikulás!<\/div>'+
'<br \/><img src="infusions/nevunep_panel/megjott_mikulas.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//dec.7-tól 24-ig
if ((calculatediff1>0) && (calculatediff1<29) && (calculatediff2<26) && (calculatediff3<33))
{
document.getElementById('unnep').innerHTML = '<br \/><div>Még '+calculatediff1+' napot alszunk és itt a Karácsony...<\/div>'+
'<br \/><img src="infusions/nevunep_panel/jon_karacsony.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//dec.25-én és 26-án
if (calculatediff1==0 || (calculatediff1>0 && calculatediff2==6))
{
document.getElementById('unnep').innerHTML = '<br \/><div>Boldog Karácsonyi Ünnepeket!<\/div>'+
'<br \/><img src="infusions/nevunep_panel/boldog-karacsonyt.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//dec.27-tol dec.31-ig
if((calculatediff1>0) && (calculatediff2>0) && (calculatediff2!=6) && (calculatediff2<7) && (calculatediff3>0))
{
document.getElementById('unnep').innerHTML = '<br \/><div>Még '+calculatediff2+' napot alszunk és itt van Uj Év..<\/div>'+
'<img src="infusions/nevunep_panel/kellemes_unnepek.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//jan.01-tol jan.07-ig
if(((calculatediff1>0) && (calculatediff2==0) && (calculatediff3>0) && (calculatediff3<8)) || ((calculatediff3>0) && (calculatediff3<8)))
{
document.getElementById('unnep').innerHTML = '<br \/><div>Boldog Új Évet!<\/div>'+
'<br \/><img src="infusions/nevunep_panel/boldogujevet.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//Ez a rész csak a TESZT kedvéért...
if(!unnep_idoszak)
document.getElementById('unnep').innerHTML = '<br \/><div>Nincs ünnepi idoszak...<\/div>'+
'<br \/><img src="infusions/nevunep_panel/boldogujevet.gif" alt="" \/><br \/>';
}
</script>
<div class="current-submenu">
<script type="text/javascript">new nevnapvalto(nevnapok, "hnevnap", "hnevnapstyle", 5000, "");</script>
<div id="unnep_keret"><div id="unnep"></div></div>
<script type="text/javascript">unnepek();</script>
<center><hr width="99%" color="#000" size="20"> </hr></center>
</div></br></br>
<?
closetable();
?> -
superboyka
csendes tag
bocsi most vettem észre van kod forás javitom
************** ÜNNEPEK ***************/
function unnepek()
{
var unnep_idoszak = false;
var today = new Date();
var theoccasion1 = new Date(parseInt(today.getFullYear()), 12, 25);
var mikulas_nap = new Date(parseInt(today.getFullYear()), 12, 6);
if(parseInt(today.getMonth())==11)
{
var theoccasion2 = new Date(parseInt(today.getFullYear()+1), 1, 1);
var theoccasion3 = new Date(parseInt(today.getFullYear()+1), 1, 8);
}
else
{
var theoccasion2 = new Date(parseInt(today.getFullYear()), 1, 1);
var theoccasion3 = new Date(parseInt(today.getFullYear()), 1, 8);
}
mikulas_nap.setMonth(theoccasion1.getMonth()-1);
theoccasion1.setMonth(theoccasion1.getMonth()-1);
theoccasion2.setMonth(theoccasion2.getMonth()-1);
theoccasion3.setMonth(theoccasion3.getMonth()-1);
var one_day = 1000*60*60*24;
calculate_mikulas_nap = Math.ceil((parseInt(mikulas_nap.getTime())-parseInt(today.getTime()))/(one_day));
calculatediff1 = Math.ceil((parseInt(theoccasion1.getTime())-parseInt(today.getTime()))/(one_day));
calculatediff2 = Math.ceil((parseInt(theoccasion2.getTime())-parseInt(today.getTime()))/(one_day));
calculatediff3 = Math.ceil((parseInt(theoccasion3.getTime())-parseInt(today.getTime()))/(one_day));
if (calculate_mikulas_nap < 0)
{
var nextyeartoday=new Date();
nextyeartoday.setFullYear(today.getFullYear()+1);
calculate_mikulas_nap = Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculate_mikulas_nap);
}
if (calculatediff1 < 0)
{
var nextyeartoday=new Date();
nextyeartoday.setFullYear(today.getFullYear()+1);
calculatediff1 = Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculatediff1);
}
if (calculatediff2 < 0)
{
var nextyeartoday=new Date();
nextyeartoday.setFullYear(today.getFullYear()+1);
calculatediff2 = Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculatediff2);
}
if (calculatediff3 < 0)
{
var nextyeartoday=new Date();
nextyeartoday.setFullYear(today.getFullYear()+1);
calculatediff3 = Math.ceil((nextyeartoday.getTime()-today.getTime())/(one_day)+calculatediff3);
}
//nov.22-tól dec.5-ig
if ( (calculate_mikulas_nap>0) && (calculate_mikulas_nap<15) )
{
document.getElementById('unnep').innerHTML = '<br \/><div>Még '+calculate_mikulas_nap+' napot alszunk és jön a Mikulás...<\/div>'+
'<br \/><img src="infusions/nevunep_panel/jon_mikulas.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//dec.6-án
if ( (calculate_mikulas_nap==0) )
{
document.getElementById('unnep').innerHTML = '<br \/><div>Gyerekek, megérkezett a Mikulás!<\/div>'+
'<br \/><img src="infusions/nevunep_panel/megjott_mikulas.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//dec.7-tól 24-ig
if ((calculatediff1>0) && (calculatediff1<29) && (calculatediff2<26) && (calculatediff3<33))
{
document.getElementById('unnep').innerHTML = '<br \/><div>Még '+calculatediff1+' napot alszunk és itt a Karácsony...<\/div>'+
'<br \/><img src="infusions/nevunep_panel/jon_karacsony.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//dec.25-én és 26-án
if (calculatediff1==0 || (calculatediff1>0 && calculatediff2==6))
{
document.getElementById('unnep').innerHTML = '<br \/><div>Boldog Karácsonyi Ünnepeket!<\/div>'+
'<br \/><img src="infusions/nevunep_panel/boldog-karacsonyt.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//dec.27-tol dec.31-ig
if((calculatediff1>0) && (calculatediff2>0) && (calculatediff2!=6) && (calculatediff2<7) && (calculatediff3>0))
{
document.getElementById('unnep').innerHTML = '<br \/><div>Még '+calculatediff2+' napot alszunk és itt van Uj Év..<\/div>'+
'<img src="infusions/nevunep_panel/kellemes_unnepek.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//jan.01-tol jan.07-ig
if(((calculatediff1>0) && (calculatediff2==0) && (calculatediff3>0) && (calculatediff3<8)) || ((calculatediff3>0) && (calculatediff3<8)))
{
document.getElementById('unnep').innerHTML = '<br \/><div>Boldog Új Évet!<\/div>'+
'<br \/><img src="infusions/nevunep_panel/boldogujevet.gif" alt="" \/><br \/>';
unnep_idoszak = true;
}
//Ez a rész csak a TESZT kedvéért...
if(!unnep_idoszak)
document.getElementById('unnep').innerHTML = '<br \/><div>Nincs ünnepi idoszak...<\/div>'+
'<br \/><img src="infusions/nevunep_panel/boldogujevet.gif" alt="" \/><br \/>'és hogy még érthetöbb legyek szoval még dátumokat tennék belle csak nem tudom hogy kell erre kellene segitség meg 1 jó kis plda szoval azt szeretném januér 25 és februér 13 közöt számlálja szövegel menyi nap van még hátra és 14 edikén boldog valentint kivánjon ha ezt kis hozza irás kisérné pl.ezzel álitod a honapot innen a napot ezt kellet belle tenni hogy ki mutassa a február 14 et és igy számolod ki metöl medig számoljon ez kellene bocs a helyesirésárt külföldi vagyok kát én a programkodra katintotam de csak ilyen lett nem tom miért
-
Jim-Y
veterán
Hát, egy nagyobb nem koca projekten, szinte minden esetben előjönnek olyan repetitív folyamatok, amit a programozóknak időről időre meg kell tenniük.
Egy projekt életciklusát alapul véve:* dependenciák letöltése, architektúrába integrálása stb..
* az elkészült modul lintelése, hibák felderítése
* tesztek futtatása
* modulok összecsomagolása (bundling)
* transpiling, például a következő nem stabil javascript verzióban megírt modulok stabil javascriptre buildelése
* különböző transpile to js modulok js-re buildelése
* az elkészült js csomag minifikálása
* az elkészült html fájlok minifikálása
* az elkészült css fájlok minifikálása
* a css preprocesszorokban megírt stílusfájlok css-re konvertálása
* fájlok másolása egyik helyről egy másik helyre, például production build másolása X helyre
* satöbbi satöbbi satöbbiA lényeg, hogy ami repetitív könnyen automatizálható folyamat, azt nem kell kézzel megcsinálni hanem a build toolok megteszik helyettünk.
Miért jó? Például nem mindegy, hogy a mobilról netezőknek mekkora méretű forrásfájl-t, forrásfájlokat kell letölteniük, mivel rendszerint a mobilról netezők mobilnettel rendelkeznek, ott meg nagyon nem mindegy, hogy 1mb az oldalad, vagy 100kb. -hasraütöttem-. Ezért célszerű minifikálni az elkészül applikációt amivel a méretet lehet csökkenteni. Ezt rendszerint nem egyszer fogod megcsinálni, hanem több ször, lehet, hogy sokszor.
1. első esetben kézzel csinálod mindig, nem nehéz a parancs, kb vmi ilyen "uglify /lib/**/*.js" vagy "uglify build/bundle.js -o build/bundle.min.js" Nem nehéz ugye? De mi van ha már nem csak ezt szeretnéd csinálni, hanem még 5-6 hasonló parancsot futtatni. Olyankor ez már teher.
2. második esetben használsz valamilyen build toolt, ahol taskokat definiálsz, és az előzőleg 5-6 különböző buildelési lépést egy paranccsal tudod kiadni, például "grunt dist" -
Jim-Y
veterán
Nekem minimális tapasztalatom van vele. Pont egy hasonlóan bagatell feladat miatt, ahol nem akartam saját REST-et felhúzni a backend fölé.
Szerintem tanulási céllal, vagy ha nem a backenden van a hangsúly, akkor nagyon jó. Van egy online könnyen kezelhető backended, és hozzá egy csomó REST endpointod, így megúszol egy csomó melót. BaaS.
Saját interfésszel rendelkezik, de az is elég egyszerű. Az erőforrásokat egy url azonosítja. Pl nálam
var Firebase = require('firebase');
module.exports.REFS = {
ROOT: new Firebase('https://***.firebaseio.com'),
BOOKS: new Firebase('https://***.firebaseio.com/books'),
USERS: new Firebase('https://***.firebaseio.com/users'),
CATEGORIES: new Firebase('https://***.firebaseio.com/categories')
};Majd ezeket queryzni is egyszerű:
function _loadBooks(dfd) {
REFS.BOOKS.once('value',
_processBookResults.bind(null, dfd),
_handleError.bind(null, dfd)
);
}Itt a books az egy JSON tömb, ha ezen belül akarsz módosítani valamit, akkor nem kell ahhoz külön még egy referencia (url), hanem
var bookRef = REFS.BOOKS.child(bookIndex)
Ezzel a kóddal megszereztünk egy referenciát a JSON tömb x. elemére ami egy book lesz, és például ezt updatelni is egyszerű:
bookRef.update({
borrower: userModel.get('id')
});Szóval, nem sokat foglalkoztam vele eddig, de hallottam róla egy podcastban és ott pont kezdőknek és otthoni projekteknek ajánlották, így gondoltam kipróbálom és tényleg nem rossz, HA az ember helyén tudja kezelni, hogy mire való
-
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
-
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
-
martonx
veterán
1. a preventDefault-ot teljsen rosszul használod. Csak 1 kell belőle, és az legfelülre.
2. nem lehetne jsfiddle-re, hogy esetleg ki is javítsuk? Bár nekem bőven jó az az 1-es pont hintje alapján kijavítod magadA kódod alapján adódik a kérdés, hogy tudod-e, mit csinál a preventDefault? Ha a válaszod igen lenne erre, akkor kérlek először olvass utána, hogy mit csinál, és értsd is meg, hogy mit csinál.
-
martonx
veterán
Ugyanarra jók. Mindig érdekeltek, de sose jutottam el oda, hogy érdemben kipróbáljam őket. Igaziból a knockoutjs-el 100%-ban elégedett vagyok, az angularjs-t kipróbáltam a hype miatt. Nem hiszem, hogy érdemben kiderülhetne bármelyik más frameworkről is, hogy sokkal jobbat tudna mint ezek.
-
Jim-Y
veterán
Szia
Ami repetitív munka arra nagy valószínűséggel van grunt plugin. Könnyű konfigurálni, és jó pár fejlesztőkörnyezet is támogatja.
Mire használatos?
Amire szinte mindig:
* Lintelés, például jshint.
* Minifikálás, például uglify
* Unit tesztek automatikus futtatására, pl Jasmine, vagy Mocha, vagy QUnit
* LiveReload, pl grunt-watch. Ez utóbbi azt jelenti, hogy ha előre beállított fájlokat szerkesztesz, és elmented őket, akkor előre beállított taskok automatikusan lefutnak. Például ha a core *.js fájlaidat szerkeszted, akkor automatikusan lefut a lintelés, vagy ha browserify-t használasz akkor a bundling stb...
* KonkatenálásÉs akkor van még ami ritkábban:
* https://github.com/gruntjs/grunt-contrib
A JavaScriptes munka már rég nem csak annyiból áll, hogy megnyitsz szerkesztővel egy js fájlt és írsz pár függvényt ami csinál valamit a dommal, esetleg behúzod a jQuery-t.. Nagyon jó ökoszisztéma alakult ki az évek alatt, nagyon hasznos eszközökkel amik megkönnyítik a munkát.
Egyrészt ami régen nem volt, és most van, jó IDE-k. Jó build toolok, szerver oldali js környezet, npm, bower, browserify...
-
martonx
veterán
A Grunt-tal a kliens oldali framework-öd build-jét tudod automatizálni (pl. html-ek minifikálása, js-ek egybegyúrása, minifikálása, css-ek, stb...). Mint ASP.NET fejlesztő bevallom még sose használtam, mert az ASP.NET - Visual Studio alapból nagyon erős ezekben.
Nodejs-es, PHP-s világban viszont elég elterjedt. -
martonx
veterán
1. kód szervezésben. Bevallom szeretem az MVC / MVVM kód szervezést. Amikor jön egy json adat, az már megy is bele egy jó kis modellbe, és ezt bindolom a megfelelő helyekre.
2. a modellek változása realtime megjelenik a böngészőben, átvezetődik más modelleken, stb...
3. nagyon szépen lehet velük template-elni, pl. valamilyen lista elemeket kell generálnod a kapott jsonból. Ezt e frameworkök nélkül jobbára kénytelen vagy elkezdeni js kóddal foreach-ekkel megírni, és összerakosgatni string részletekből. Ha láttál már ilyen js kódot, akkor érteni fogod, hogy mire gondolok.
4. szépen el lehet velük szeparálni a különböző kód rétegeket (html - js és js-en belül a class-ok, service-ek, controller-ek)
5. a html-eidet is szépen kis darabokra tudod szedni, ezáltal sokkal átláthatóbb lesz a kódod
6. segítenek a routingban, DI-ban (ez mondjuk csak az angularjs-re igaz, aminek viszont a DI-át százszor is elátkoztam, szóval ez azért nem mindig előny). Knockouthoz meg azt húzol be pluszban, amit jól esik pl. pagejs + requirejs.
7. összességében, jóval kisebb kód mennyiséget eredményeznek, lásd Jim-Y esetét. Mondjuk angular-t telefonra a gyatra teljesítménye miatt én se mernék bevállalni, de egy 30Kb-os knockout-ot már volt, hogy használtam telefonon, és tök szépen, gyorsan tette a dolgát, pedig ez még az okostelefonok őskorában volt, amikor 1 magos 600Mhz-ez szutykokon futottak a mobilos böngészők első verziói.Mindezek ellenére abszolút nem azt mondom, hogy akkor most mindenki kezdjen el valamilyen js framework-öt használni, hiszem hogy a webes projektek jelentős részének nincs rájuk szüksége. De egy picit is jelentősebb projektet én már nem kezdenék el knockoutjs (rosszabb esetben angularjs) nélkül.
-
Jim-Y
veterán
Kozben rajottem, hogy ebbe beleszamoltam a dependenciakat is, igy azert jocskan lecsokkent a sorszam, de meg igy is 100K folott van. Amugy nem tudom, hogy ez JS-ben mennyinek szamit, szerintem kozepesnek. Atlatni, hasznalunk RequireJS-t, igy azert konnyebb. Hogy erted, hogy "miben dolgozik egy kód"?
-
martonx
veterán
Single page application-ökhöz. Eddig kettő nagyobb ilyen projekten dolgoztam. Egy CRM rendszeren, amit knockout-tal csináltunk, és egy média library-s, rendelő oldalon ami angularjs-el készült (mielőtt páran felnyögnének, ez egy elég sajátságos terület, elég sajátságos megoldásokkal, így nem volt kérdés, hogy mindenből custom-ot kellett írnunk).
Kisebb ko-s projektjeim voltak még, mint pl. online repülőjegy foglaló rendszer (ezt ide is tudom linkelni, mert ez publikus link), ahol a járat keresés résznél mindent a knockout vezérel, illetve per pillanat egy pénzügyi szektoros fejlesztésen dolgozok, ami szintén publikus lesz, ha elkészül. -
Jim-Y
veterán
Na, akkor legalább volt értelme a példának.
Ezt írja a konzolra:
Vagyis
10
10
10
10
10Magyarázat: (ha esetleg valamit rosszul írnék, akkor javítsatok ki többiek, nem szeretném ha valamit az én hibámból jegyezne meg rosszul
1:
for (var i = 1; i < 6; ++i) {
//...
}Ezt az interpreter így értelmezi:
var i = undefined;
for(i = 1; i < 6; ++i) {
//...
}Tehát az i ciklusváltozót felemeli a függvény törzsének elejére, majd undefined-ként deklarálja.
2:
cont.addEventListener('click', function () {
console.log(i);
});Minden click eseményre a cont objektumon/elementen regisztrál egy névtelen függvényt. A lényeges momentum, hogy minden függvény javascriptben látja/tartalmazza az őt körülvevő függvények kontextusát.
function a() {
var i = 10;
function b() {
var j = function() { return 11; };
function c() {
console.log(i); // 10
console.log(j()); //11
}
c();
}
b();
}
a();Az eredeti példánál maradva az anonim függvény látja az őt körülvevő test függvény kontextusát, így az i változót is. Az addEventListener függvényel olyan működést definiálunk, ami valamikor a jövőben fog lezajlani (amikor klikkelünk az elemre), ezért a ciklus már rég végez mire mi az elemre klikkelünk.
3:
amikor végül rányomunk a div-re, az i már a ciklus végén 6, majd egy újabb értékadással i = 10. Ne felejtsük, hogy az összes anonim függvény "cipeli" magával a test függvény kontextusát amiben az i változóhoz már a 10 érték van rendelve, ezért fog 5 x 10-et kiírni a program a konzolra.A megoldás az lehet, ha minden anonim függvénynek/hez egy új kontextus-t rendelünk, amiben az i változó a ciklusban éppen aktuális értéken fog szerepelni.
Példa és megoldás:
var cont = document.querySelector('#container');
function test() {
for (var i = 1; i < 6; ++i) {
(function (i) {
cont.addEventListener('click', function () {
console.log(i);
});
}(i));
}
i = 10;
}
test();A (function() { .. }()); egy új kontextust generál amibe elmentjük az i ciklusváltozó aktuális értékét így az mindig fix marad.
üdv
-
Jim-Y
veterán
Élő példa, hogy mire jó még:
Találós kérdés, mit ír ki ez a program, anélkül, hogy kipróbálnád?!
<div id="container">Katt ide</div>
########################################
var cont = document.querySelector('#container');
function test() {
for (var i = 1; i < 6; ++i) {
cont.addEventListener('click', function () {
console.log(i);
});
}
i = 10;
}
test(); -
Jim-Y
veterán
Ez egy IIFE (immediately invoked function expression). Bővebben erről itt olvashatsz. Ben Alman - IIFE
Azért jó, mert
1: csinálsz egy függvényt, ezzel ugye egyből egy új variable environmentet
2: rögtön meg is hívodAmi az iffy-n belül van az nem "szennyezi" a globális névteret. A pattern segítségével le is tudjuk védeni az egyes könyvtárakat. Például a következő kódban a jQuery object-re $-ként tudunk hivatkozni anélkül, hogy félnünk kéne, hogy egy másik 3rd party library közben "felüldefiniálná" a "$" jelet.
Például:
(function($) {
}(jQuery));Az pedig, hogy miért jobb nem szennyezni a globális névteret, elsőszámű good-habit. Ennek utána tudsz olvasni neten.
Egyébként erre épül nem egy pattern, például a self revealing module pattern is. Erről itt olvashatsz bővebben: Addy Osmani - Design Patterns #revealingmodulepattern
-
Karma
félisten
Nem csak a Brackets, hanem például a TileMill térképszerkesztő is tisztán Node.js alkalmazás. Ez utóbbi is open source, meg lehet nézni hogy mire épít.
Én egyébként a DeskShellről és a node-webkitről hallottam eddig.
(#4106) Sk8erPeter: Tényleg nagyon jó cikk, köszi
Egyébként az ECMAScript 6 terjedéséről mit lehet tudni? Azt olvastam, hogy a Node a 0.11.x-es ágon már támogatja, de stabilizálódni még nem akar... Pedig a generátorok nagyon odavernek.
Szívesen használnám már gyakorlatban például a co-t.
-
trisztan94
őstag
Nagyon nem érdemes. Maximum, ha Win 8/RT-re akarsz, ott viszonylag jó.
Vagyis hát igazából attól függ. Ha nem natív nyelven fejlesztesz egy OS-re, akkor az lassabb lesz mindenképp (tehát windows esetén C++, C#, OSX esetén Objective C), mert van egy wrapper körülötte ami végül lefordítja arra (asszem, javítsatok ki, ha tévedek). Akkor lehet jó választás, ha Cross Platform appokat akarsz fejleszteni (lásd: adobe brackets), amit könnyű pluginezni.
De a brackets pl. pont a fent említett dolgok miatt nagyon be tud lassulni. -
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
A click eseményt - azért lett "e", mert így rövidítettem az "event" szót, de átnevezhetnéd azt a paramétert "kiskutyafule" változónévre is. Érdemes ezt is kiíratnod konzolra - csak tesztelés erejéig, ilyenek ne maradjanak benne az éles kódban!! -, hogy lásd, mi van benne:
console.log('event: ', e);
Hasznos tud lenni, ha ismered a tartalmát: le tudod kérni például a klikkelés koordinátáit, a célzott elemet (a jelen példában e.target, ennek aztán további attribútumai vannak, mint pl. ha lenne id-je az adott elemnek, akkor e.target.id, a "name" attribútum az e.target.name segítségével, a "value" pedig az e.target.value-val érhető el, le tudod kérni a szülőelemet az e.target.parentNode-dal, és így tovább), és egyebeket. -
Sk8erPeter
nagyúr
Pedig kell az index
Érdemes használnod a debuggoláshoz hasznos gyorseszközöket, nyisd meg a használt böngésző fejlesztőpaneljét (Ctrl+Shift+I vagy F12), kattints a Console fülre, és írasd ki az aktuális elemet, hogy megtudd, mi van benne, például:
console.log("Documents named 'x': ", document.getElementsByName("x"));
-
Jim-Y
veterán
Több gond is van vele, egyrészt $(this) és nem $('this'), mert utóbbi esetben a DOM this tageket szűrnéd ki vele.
Másrészt amit meg akarsz csinálni azt nem így kell, mert a a $(this) ebben a kontextusban az oldalon található input mezőket adja vissza.
A $(this).length == 0 akkor igaz, ha az oldalon nincs <input>.Helyesen: [link]
Magyarázat:
- a this mindig a hívó objektumra utal. Ebben az esetben amire a focusout-ot meghívtuk. Mire hívtuk? $('input')-ra ami egy olyan objektum ami az oldal összes input mezejét tartalmazza.
- a $(this) a this objektumból csinál egy jquery objektumot, így a $(this)-re meghívhatjuk a jquery-s függvényeket. Mint a példában: $(this).after("<p>Empty this</p>");
Az after egy jquery metódus, jquery objektumokon van értelmezve. this.after() hibás!
- a this.value helyett írhattunk volna $(this).val() -t is, ugyanazt az eredményt kapjuk. Ellenben, míg a value az input element beépített property-je, addig a val() egy jquery-s függvény, valószínűleg a val()-is a value-t kérdezi le. Annyi különbség mégis van, hogy a val() egy jquery objektummal tér vissza, tehát működik rajta a method chaining. -
Sk8erPeter
nagyúr
Ennek a pluginnek köze nincs a szerver felé történő adatküldéshez. Ez csak feldob egy modális ablakot. Mint a jQuery UI Dialog, aminek egyébként kissé bőségesebb a dokumentációja.
A form submit eseménykezelésébe, vagy legalább a submit gomb click eseménykezelőjére kellene kötni az adatküldést a szerver felé. -
Jim-Y
veterán
Mi lenne ha submit esetén ezzel nyitnád meg a modal-t, és nem a hülyebiztos módon?!
$('#myButton').click(function(e) {
e.preventDefault();
$('#myModal').reveal();
});Egyébként, azért nekem még mindig hiányzik egy kódrészlet a TE kódodból, mert nyílván ezt a sample-t úgy tették fel, hogy ez működik, ha ezt beilleszted a saját kódodba, akkor nem emiatt nem fog működni, hanem amiatt, mert vagy valamit rosszul csináltál, vagy valamit a te környezetedben máshogy kéne csinálni.
Új hozzászólás Aktív témák
Hirdetés
- Filmgyűjtés
- AMD Navi Radeon™ RX 9xxx sorozat
- E-book olvasók
- Fejhallgató erősítő és DAC topik
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Házimozi belépő szinten
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Eléggé lekorlátozza az NVLink Fusiont az NVIDIA
- Bittorrent topik
- CADA, Polymobil, és más építőkockák
- További aktív témák...
- TP-Link ER-7212PC Omada 3-in-1 Gigabit VPN Router
- TP-Link EAP Omada Wifi AP-k (225, 245, 615)
- Mars Gaming ML-LCD240 2x ARGB 120mm FDB Fan LCD Display (Alkatrésznek) INGYEN FOXPOST
- CORSAIR K55 RGB PRO XT (Kartámasz nélküli) INGYEN FOXPOST
- Szép! Dell Latitude 7430 ÜTÉSÁLLÓ! Üzleti Profi Ultrabook 14" -60% i5-1245U 16/512 FHD IRIS Xe
- BESZÁMÍTÁS! MSI B450 R7 7 5700X 32GB DDR4 512GB SSD RTX 2080 8GB Fractal Design Define R5 FSP 750W
- MacBook felvásárlás!! MacBook, MacBook Air, MacBook Pro
- Samsung Galaxy S23 Plus 256 GB Kártyafüggetlen 1Év Garanciával
- BESZÁMÍTÁS! 2TB Kingston KC3000 NVMe SSD meghajtó garanciával hibátlan működéssel
- Új Apple iPhone 16e 128GB, Kártyafüggetlen, 3 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest