- Random25: Windows 11 telepítés Pendriveról
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- sziku69: Fűzzük össze a szavakat :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Szólánc.
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- Luck Dragon: Asszociációs játék. :)
- btz: Internet fejlesztés országosan!
- ricshard444: Fényképező ? Telefon helyett
- Magga: PLEX: multimédia az egész lakásban
-
LOGOUT
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
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]
-
Sk8erPeter
nagyúr
válasz
norby10 #4400 üzenetére
Elkúrtad a linket, gondolom ez akart lenni:
http://jsfiddle.net/norberto1112/f3L07884/
Hogyhogy mi a gond? Talán hogy a mezőnek még nincs értéke, és pont azt is adja vissza?
(Fogadjunk, valami olyasmit szeretnél, hogy legyen egy űrlapod, benne egy szövegmezővel, és most elküldéskor szeretnél alertelni a bepötyögött értéket - de előbb tanulj meg kérdezni...)
Új hozzászólás Aktív témák
- exHWSW - Értünk mindenhez IS
- HiFi műszaki szemmel - sztereó hangrendszerek
- Konzolokról KULTURÁLT módon
- Milyen légkondit a lakásba?
- Azonnali fáradt gőzös kérdések órája
- Villanyszerelés
- Vicces képek
- Kezdő fotósok digitális fényképei
- AliExpress tapasztalatok
- Vezetékes FEJhallgatók
- További aktív témák...
- AZTA! HP EliteBook 840 G8 Fémházas Laptop Ultrabook 14" -45% i7-1185G7 16/512 FHD IPS Iris Xe
- Sony PlayStation 5 (PS5) Játékkonzol - Lemezes verzió, dobozában!
- Zalman R1 White - Ha valami egyedire vágysz 2.0!
- Riverside 500
- ÚJ Bontatlan Apple Macbook Air 13,6 M4 16GB/256GB - Ezüst - MAGYAR(2025) - mw0w3mg/a - 3 év garancia
- Magyarország piacvezető szoftver webáruháza
- AKCIÓ! Apple iPad Pro 11 2024 1TB WiFi + Cellular tablet garanciával hibátlan működéssel
- Bomba ár! HP Elitebook 850 G3 - i7-6GEN I 16GB I 256GB SSD I RadeonI 15,6" FHD I Cam I W11 I Gari!
- Targus Universal USB 3.0 DV1K-2K Compact docking station (DisplayLink)
- Telefon felvásárlás!! Xiaomi Redmi 9, Xiaomi Redmi 9AT, Xiaomi Redmi 10, Xiaomi Redmi 10 2022
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest