Hirdetés

Keresés

Új hozzászólás Aktív témák

  • v2izzy
    tag

    Nem egészen, ha ezt tenné, szerintem az összes callback hívásnál a path az utolsó név lenne.
    Itt egy példa, ahogy próbáltam rekonstruálni a dolgot a WinJS alapján :F

    Hmm, igaz.
    Gondoltam rá, hogyha sokáig nem fut le a függvény akkor addigra megváltozik, de logikusnak tűnt a leírásom (mert szerintem úgy jó lehetne). :D

    Hát egy megoldás rá, hogy .bind-al adod neki az értéket this-ben viszont így a függvény this-je ugye eltűnik, de ha ez nem gond, akkor megoldás lehet. példa

  • v2izzy
    tag

    Sziasztok,

    Windows 8 appot fejlesztek javascriptben és kéne egy kis segítség, talán úgy is meg tudja valaki válaszolni, ha nem ismeri a Win-js-t.

    Azt szeretném, hogy az összes filet végignézem a music mappában és egy listába kiírom a file nevét, az előadót és a címet. A gond az, hogy a Windowsban szinte minden függvény aszinkron lett, ami egyrészt jó, másrészt emiatt most elakadtam.

    A lényeg, hogy a három szükséges adatból a filenév (vagy az útvonal) a resultLibrary[i].path -al szinkron elérhető, míg az ID3 tagből nyert információk csak aszinkron módon a callback függvényben. De a callback függvényben már nem tudom, hogy melyik fájlhoz tartozott az infó. Mi a módja ilyenkor annak, hogy összekapcsoljam a kettőt? Legjobb lenne, ha a callback függvénynek át tudnám adni a path-t, de nem sikerült.

    var musicLibrary = Windows.Storage.KnownFolders.musicLibrary;
    musicLibrary.getFilesAsync().then(function (resultLibrary) {
    for (var i = 0; i < resultLibrary.length; i++) {
    var path = resultLibrary[i].path;
    resultLibrary[i].properties.getMusicPropertiesAsync().then(function (musicProperties) {
    $("#list").append('<li>'+ musicProperties.artist + ', ' + musicProperties.title + '</li>');
    }
    });

    Előre is köszönöm a segítséget!

    Nem kell átadnod, egyszerűen csak használd fel a path változót a callback függvényben.

    $("#list").append('<li>' + path + ': ' + musicProperties.artist + ', ' + musicProperties.title + '</li>');

    Itt egy példa.

    Már gondolkodtam ezen, hogy honnan tudja az értékeket, bár nem kerestem, és most hirtelen nem is találtam erre konkrét leírást. Aki tudja pontosan, leírhatja, mert engem is érdekelne. :)
    Amúgy én úgy gondoltam, hogy amikor meghívsz egy függvényt függvény paraméterrel, akkor a paraméterfüggvényeket interpretálja és az adott scopeban levő változók ha megjelennek a függvényben (persze úgy ha ott írod le a függvényt, nem előre definiálod), azokat kicseréli az adott értékekre (konkrét szám, mutató akrámi) és így fut le a függvény.

  • v2izzy
    tag

    Már akartam mutatni, aki most tanul js-t annak kötelező, de aki jobban ismeri a nyelvet az is olvassa át mindenképp ezt: idiomatic.js
    Sok hasznos nyelvi sajátosság és kódolási technika található meg! :)

  • v2izzy
    tag

    JS-ben könnyebb, igen, de a nagy igazság az, hogy semmiben se bízhatsz, amivel kapcsolatba lép a felhasználód vagy a külvilág.

    v2izzy: :Y :R
    Egyben ez az underscore.js nagyon komoly cuccnak tűnik algoritmizáláshoz.

    Eddig még nem ismerted? Nagyon hasznos. Számomra majdhogynem alapabb mint egy Jquery. Persze részben azért is mert ezt nem csak kliens oldalon lehet használni. :)
    Mindenképp érdemes tudni róla sok időt lehet spórolni vele, főleg ha szereted használni a funkcionális programozás elemeit.

  • v2izzy
    tag

    for-while is egy for ciklusnak számít? :))

    amúgy köszönöm mindenkinek a válaszokat :R

    Kedvet kaptam a problémához és ha jól értelmezem akkor egy ilyen függvényre gondoltál? Ez high-order megoldás szóval majd te írd meg hozzá az összehasonlító függvényt. (a linkelt példában amúgy azt teszteltem, amit te írtál)

    Ja és a sorrend az megváltozik, de szerintem az nem nagy gond, de ha mégis meg lehet oldani. :)

  • v2izzy
    tag

    Ezzel a frameworkkel ma találkoztam, ajánlom mindenkinek!

    :DDD

    Csak nekem tűnik úgy, hogy ez nagyon hasonlít a pure javascriptre? Érdekes projekt mindenesetre.

    :DDD

  • v2izzy
    tag

    Jah, mondjuk így utólag megnézve elég egyértelmű.
    De akkor most mi van? A Te selectoroddal mennyivel is gyorsabb, mint a jQuery-vel?
    Tehát a
    var foo = $.styled('.foo')
    azt mondod, jóval gyorsabb, mint a
    var foo = $('.foo')
    ?

    Na akkor, sorra veszem. :)

    1. Csak jQuery:
    var foo = $('.foo')

    foo.css('color', '#CCC')
    foo.css({
    'font-size': '14px'
    , width: '250px'
    })

    Ennek a sebessége átl. 160-170ms.

    2. Styled I. változat:
    var foo = $('.foo').styled()

    foo.set('color', '#CCC')
    foo.set({
    'font-size': '14px'
    , width: '250px'
    })

    Ennek a sebessége átl. 5-6ms.

    3. Styled II. változat:
    var foo = $.styled('.foo')

    foo.set('color', '#CCC')
    foo.set({
    'font-size': '14px'
    , width: '250px'
    })

    Ennek a sebessége átl. 0-1ms.

    A II. azért gyorsabb mint az I., mert az I.-ben van egy függvényhívás először: $('.foo') és ennek a időt vesz a lefutása (a 2 közti különbség). A II.-nál pedig csak egy stringként átadom a selectort.

  • v2izzy
    tag

    Ez elég durva különbség.... :Y
    Mondjuk azt nem értettem, miért úgy mérted az időt, hogy a kezdeti időnél new Date()-et használsz, a végénél meg Date.now()-t, akkor már legyen következetes. :D Mármint az alábbi résznél:
    var start = new Date();
    ...
    var end = Date.now();

    Nem sok teteje van. :P

    "Ezért hozzáadtam egy ilyen végrehajtási módot is."
    Példa a használatra? :)

    Ja csak úgy tűnik kicsit összevissza másoltam ki a kódot a hsz-edből. Javítva! :D

    Amit linkeltem példában már azt használtam. :)

  • v2izzy
    tag

    Semmi különös benchmarkra nem gondoltam.

    Csak valami ilyesmire, ami milliszekundumokban mérve kijelzi a scriptek lefutása közötti különbséget:

    var startTime, endTime, differenceInMilliseconds;
    startTime = new Date();

    for(var i = 0; i < 10000000; i++){
    ;
    }

    endTime = new Date();

    differenceInMilliseconds = endTime - startTime;
    console.log('difference in milliseconds:');
    console.log(differenceInMilliseconds + ' ms');

    Itt a for ciklus helyére kerülne a Te kódod, így lehetne tesztelni a hagyományos jQuery-s és a styled pluginos lefutás közötti különbséget.

    Egyébként most látom, MDN-en is van példa (csak már megírtam a fentit addigra):
    MDN - Date

    // using static methods
    var start = Date.now();

    // the event you'd like to time goes here:
    doSomethingForALongTime();

    var end = Date.now();
    var elapsed = end - start; // time in milliseconds

    Másik:

    // if you have Date objects
    var start = new Date();

    // the event you'd like to time goes here:
    doSomethingForALongTime();

    var end = new Date();
    var elapsed = end.getTime() - start.getTime(); // time in milliseconds

    Lényegében ugyanaz, mint az enyém.

    ===========================================================

    Egyébként érdekes, sokan nem hiszik el, hogy az Opera JavaScript-motorja márpedig igenis gyorsabb, mint a többi jelenlegi böngészőé. Ahogy azt sem hiszik el, hogy a Firefoxé lassú (ahogy lassú a Firefox általában).
    Most lefuttattam egy tesztet a fenti, legelső kóddal a konzolból - tehát 10 millió lépéses for ciklus:

    Chrome 21.0.1180.83 m

    JavaScript benchmark - for loop with 10 million steps in Chrome 21.0.1180.83 m

    Átlag: 9733 ms.

    Firefox 14.01

    JavaScript benchmark - for loop with 10 million steps in Firefox 14.01

    Átlag: 20759 ms (!!!).

    Opera 12.01 (x86)

    JavaScript benchmark - for loop with 10 million steps in Opera 12.01 (x86)

    Átlag: 2163 ms (!!!).

    A Firefox tehát 3 mérés után átlagban 18596 ms-mal (!!!) lassabban végzett a feladattal, mint az Opera, Chrome pedig átlagban 7570 ms-mal hajtotta végre lassabban az Operánál; a Firefox 11026 ms-mal volt átlagban lassabb, mint a Chrome.
    Az Opera tehát elég feltűnően nyert. Ezt a mérést még többször végrehajtottam, mindig hasonló eredményekkel zárult, legfeljebb 1-1,5 másodperc differencia volt az egyenként kijött eredmények között. A teszt idejére egyébként a legtöbb extensiont a böngészőkben letiltottam.
    Számomra azért meglepő, hogy 10 millió lépésszámnál már ilyen szintű különbségek jönnek elő.
    A Firefox GUI-ja egyébként a teszt idejére lényegében végig teljesen használhatatlan volt ("Not responding").

    A tesztgép pedig az adatlapomon is látható Lenovo Y570 (Intel Core i5 Mobile i5-2410M @ 2.30 GHz / 1066MHz / 3MB L2 - 2.9GHz Turbo Boost, Western Digital Scorpio Blue WD7500BPVT-24HXZT1, Intel HD 3000 / NVIDIA GeForce GT555M - 1GB GDDR5 VRAM, ...).

    Látod ez túl egyszerű és ésszerű volt, hogy eszembe jusson. :D
    Itt ki lehet próbálni a tesztet, konzolba írja az időt. Nekem jQuery-re átlagba 160-170ms-t adott, styled-ra 0-1ms-t. Bár most annyi változtatás történt, hogy észrevettem például az hogy $('.foo') időt vesz el (átl. 3-5ms) míg megcsinálja az objektumot (de bennmaradt, mivel szerintem ez szebb, meg ha valaki olyat csinál, hogy $('body').find('.foo'), akkor abból ő összerak egy selectort). Ezért hozzáadtam egy ilyen végrehajtási módot is.

  • v2izzy
    tag

    + (#2794) Karma :
    bocs, most látom, hogy erre elfelejtettem reagálni, pedig ez egy jó téma.
    A DOM CSS gondolom azért lehet gyorsabb, mert a böngésző "natívhoz közeli" dolgait piszkálod, nem pakolsz köré egy library-t (mármint itt a jQuery-t). De mennyivel gyorsabb ez egyáltalán?
    Végül is attól még, hogy ilyen módon használja az ember, a böngészőnek ugyanúgy frissítenie kell minden elemet, ha az adott selectorra 100'000 elem illeszkedik, akkor annyit.
    v2izzy, tudnál esetleg valami benchmark-szerű mérést csinálni erről? :B Ha már így belementél a dologba... :P Kíváncsi lennék, milyen különbségeket lehet mérni, érdekes lehet egy ilyen eredmény.

    Igazából nem nagyon ismerek benchmark-os oldalakat/programokat, ha tudsz akkor ajánlhatnál. :))
    A Chrome Inspector-ban a Profile-al próbáltam méregetni. A CSS Selector Profiles-ban mértem le a 2 fajtát, styledal, és csak sima jQuery-vel, előbbi 2 mérésből 0 és 1ms, utóbbi 94 és 107ms lett. A CPU Profiles ezt adta jQuery-vel, styled-al.
    Amúgy persze érthető, hogy miért lassabb a .css(), hiszen ennél mindegyik matched elementet sorra veszi, csinál belőle egy jQuery-nek megfelelő osztályú objektumot, metódusokkal stb. és ez mind időt vesz el. A styled meg szintén valamilyen módon sorra veszi az elementeket, de az már csak annyira, mint amikor a .css() megváltoztatja a style attribútumot és azt sajnos nem tudom, forráskód hiányában, hogy talán optimálisabb módon is akár. Memória szempontjából egyik se kérdéses, a styled alapból nem használhat sokat, a jQuery-s objektumokat meg a GC majd összeszedi gondolom. :)

  • v2izzy
    tag

    A DOM CSS-t használja, így a CSS szabályokat módosítja a DOM-on belül, nem konkrétan az elementeket manipulálja.

    Szerintem nagyon frankó gondolat :)
    (Bár inkább classokat használnék :P)

    Egyébként a set se feltétlen bonyolult, hiszen a rule-ok szövegét lehet szerkeszteni is. Mondjuk jó kérdés, hogy a specificitással mi lesz.

    Igen, nem bonyolult a set. Így gondoltam. És, bár logikus, de tényleg gyorsabb így mint a jQuery-s .css(). Most a példában 1000db-on csinál, de kipróbáltam 40k-val és ott láthatóan gyorsabb. :)

  • v2izzy
    tag

    "olyan előnye (persze ez valahol lehet hátrány is) van a jQuery-s .css()-el szembe, hogy ez azután is igaz az egyező selector-ú elemekre miután miután a művelet végrehajtódott."
    :F Ezt nem értem. Miért, a .css() miért ne lenne igaz a "művelet" végrehajtása után? Milyen "műveletre" gondolsz?
    Vegyünk egy példát, van egy ilyened:
    <div class="alma">ASD</div>
    Nyomatsz egy ilyet:
    $('.alma').css('color', 'red');

    Ez ennek végrehajtása után is igaz lesz.... persze fogalmam nincs, mire gondolhattál...

    Lehet kicsit értelmetlenül fogalmaztam de arra gondoltam amit Karma írt. :)

  • v2izzy
    tag

    Ja igen, ezen a .set() metóduson akkor is meglepődtem egy kicsit, hogy hogyan is lenne ez implementálva. Hogyan állítanád át a stílusokat? A fájl módosításához már nyilván szerveroldali programozás is szükséges. Anélkül meg csak kliensoldalon lenne érvényes a dolog, aminek meg így első blikkre nem tudom, mi a konkrét haszna.
    Egyébként a megvalósítás szempontjából nekem az tűnne logikusnak, hogy az épp kiválasztott fájlnál történjen meg a módosítás, a többiben ne matarásszon, mert az nem biztos, hogy a kívánt viselkedést eredményezné.

    Nem kell hozzáférni a css fájlhoz, én sem abból olvasom ki. A stíluslapok betöltődnek a DOM-ba és innen könnyen lehet kezelni őket, szóval egy értékadás nem a fájlt írja át hanem csak a DOM-ba. A .set()-et azért tartanám jónak, mert pl. olyan előnye (persze ez valahol lehet hátrány is) van a jQuery-s .css()-el szembe, hogy ez azután is igaz az egyező selector-ú elemekre miután miután a művelet végrehajtódott. Sebességbeli különbséget nem tudok, de kíváncsi lennék, meg kellene nézni. Plusz így nem tesz a html kódba egy ronda style attribútumot. :D

  • v2izzy
    tag

    Mindkettő elég hasznosnak tűnik, gratula.
    Nem nagyon olvastam át a doksit, de jól értem, hogy az első plugin arra való, hogy CSS-fájlokban kotorásszon adott osztályokra, azonosítókra definiált stílusokra?

    Igen arra való. Kiválaszthatod, hogy melyik fájlban/fájlokban keressen, mert így gyorsabb lehet és csak ami selector-t a jQuery átad ($(selector).styled()), azt megkeresi és visszaadja. Még lehetne akár bővíteni olyannal hogy legyen egy .set() is, tehát lehessen változtatni a CSS-t.
    Viszont amiben nem voltam biztos, hogy ha van több fájl és azokban valamelyik selectorhoz tartozó stílus többször is szerepel, akkor melyiket tartsam meg? Most úgy csinálja, hogy mindig ha a következő fájlban lévő felülírja a már szereplő stílusokat. Ez logikus, de nem tudom, hogy ez a legjobb megoldás.

  • v2izzy
    tag

    Hello!
    Nemrég felmerült egy olyan gondom, hogy el akartam érni CSS stílus értékeket JS-el de úgy hogy nem egy meglévő elem stílusát vizsgálom. Meg is találtam hogy el lehet érni, de elég hosszadalmas mire hozzá lehet jutni a kívánt értékhez. Keresgettem jQuery-ben valami szép megoldást rá (vagy nem jQuery-ben), de nem nagyon talátam. Úgyhogy csináltam egy kis plugin-t, ami a beadott selector szerint megkeresi az ahhoz tartozó stílusokat. Akinek van kedve nézze meg és lehet közreműködni is akár, mert lehet még javítani/plusz funkciókat bele tenni. :)

    + részben ennek segítségével elkészült egy sportversenyeknél használt csoport és bracket készítő bundle-öm. Akinek netán ilyenre lenne szüksége. :)

    </self-reklám> :D

  • v2izzy
    tag

    Az volt a gondom, hogy nem tudtam beletenni az összes adatot a korábbi módszeremmel az obj változóba, igazából nem értettem, hogy hogy kellene megvalósítanom a dolgot.
    Nekem az adatok sorrendje teljesen mindegy, csak kirajzolom a polygonokat. :)
    Jelenleg az alábbi módon valósítottam meg a dolgot, remélem nem csináltam benne programozói hibát (végülis működik :DDD ).

    function process_data(items){
    var x;
    var data = new Array();
    data = items;
    while ( x = data.pop())
    {
    var i = 5;
    var y = x[i];
    var obj = {};

    var polygon = new google.maps.Polygon({
    paths: google.maps.geometry.encoding.decodePath(String(y)),
    strokeColor: "#0000ff",
    strokeOpacity: 1,
    strokeWeight: 1,
    fillColor: "#00ffba",
    fillOpacity: 0.4,
    editable: false
    });

    polygon.setMap(map);
    var obj = {
    'name':x[i-4],
    'description':x[i-3],
    'address':x[i-2],
    'wikipedia':x[i-1],
    'points':x[i],
    'category':x[i+1],
    'parent_area':x[i+2],
    'area':polygon
    };

    polygon.objInfo = obj;

    google.maps.event.addListener(polygon, 'click', function(event){
    showArrays(event,this.objInfo,this.getPath());
    }); //kattintásra megnyílik az infowindow
    google.maps.event.addListener(polygon, 'rightclick', function(event){
    //this.setMap();
    showContextMenu(event.latLng,this.objInfo);
    });

    infowindow = new google.maps.InfoWindow();
    }
    }

    function showArrays(event,obj,vertices) {

    var contentString = "<b>" + obj.name + "</b><br />";
    contentString += "Leírás: " + obj.description + "<br />";
    contentString += "Cím: " + obj.address + "<br />";
    contentString += "Wikipedia: <a href='http://hu.wikipedia.org/wiki/" + obj.wikipedia + "'>hehe</a><br />";
    contentString += "Kategória: " + obj.category + "<br />";
    contentString += "Szülõ terület: " + obj.parent_area + "<br />";
    contentString += "Clicked Location: <br />" + event.latLng.lat() + "," + event.latLng.lng() + "<br />";


    infowindow.setContent(contentString);
    infowindow.setPosition(event.latLng);

    infowindow.open(map);
    }

    A ShowContextmenu függvényt azért nem másoltam be, mert az még nincs kész. :B

    Így már igen működik, bár az kicsit fura, hogy az obj-nak az area property-je a polygon, majd az egész obj-ot beleteszed a polygonba. :) De hát így fog működni ezzel a módszerrel az igaz. Viszont itt egy példa ami szemlélteti, hogy különböző ciklusfajták hogy kezelik a handler függvényt. Ez alapján így is írhatnád:

    data = items;
    data.forEach(function(x) {
    ...
    var obj = {
    'name': x[i-4],
    ...
    'area': polygon
    };

    google.maps.event.addListener(polygon, 'click', function(event){
    showArrays(event, obj, this.getPath());
    });

    google.maps.event.addListener(polygon, 'rightclick', function(event){
    showContextMenu(event.latLng, obj);
    });

    ...
    })

  • v2izzy
    tag

    A térkép már inicializálva van ezelőtt a kód előtt. Ezzel annyit csinálok, hogy az adatbázisból lekért adatokból kirajzolom először a polygonokat és ennek az adatait akartam átvinni a másik függvénynek. Mindegyik polygon rendelkezik egy click és egy rightclick listenerrel, előbbire egy buborék jön fel, amiben csak szimplán kiírom az adatait, míg utóbbi esetben egy menü, amiben lehet választani, hogy törlöm vagy szerkesztem a polygont. Mindkét esetben szükségem van az adataira. A kódban csak a neve szerepelt, egyébként azóta már belekerült a leírása, címe, kategóriája, stb.
    A data tömbben a területek adatai sorban vannak (abban a sorrendben, ahogy az adatbázisban), viszont azt nem értem, hogy miért baj, hogy a pop() függvénnyel veszem ki belőle az adatokat, mert szerintem ebben az esetben teljesen irreleváns az, hogy milyen sorrendben rajzolom fel a térképre a területeket. Bár mindketten írtátok, hogy érdemes lenne sorban. Az én megoldásomnak (fordított sorrend) milyen hátulütője lehet a későbbiekben? :R

    Például egy új embernek, vagy neked később nehezebb lesz egyből megértened, mi is történik és szerintem egy .forEach() gyorsabb is mint így (bár ez csak nagy adatmennyiségnél lenne feltűnő).
    Másrészt nem az volt kezdetben a gondod, hogy csak az utoljára kiszedett tömb elemei kerülnek bele? A pop-os módszerrel ez így is van, de ha forEach-el csinálod, akkor az eventListener-ek handler függvényében, mindig az aktuális elemet tudod felhasználni és akkor így nem szükséges id. Remélem jól értelmeztem a problémát. :)

  • v2izzy
    tag

    Elakadtam a munkában, az adatbázisból betöltött adatokat szeretném egy tömbben tárolni úgy, hogy a kirajzolt polygonokra jobb gombbal kattintva fel tudjam használni azok adatait. A kód:

    function process_data(items){
    var x;
    var data = new Array();
    data = items;
    while ( x = data.pop())
    {
    var i = 5; //egy elemnek az ötödik paramétere hordozza a koordinátáit
    var y = x[i];
    var obj = {};
    /*$('<ul/>', { // a kapott elem kiírása ellenõrzésképpen
    'class': 'my-new-list',
    html: y
    }).appendTo('#get_informations');*/

    var polygon = new google.maps.Polygon({
    paths: google.maps.geometry.encoding.decodePath(String(y)),
    strokeColor: "#0000ff",
    strokeOpacity: 1,
    strokeWeight: 1,
    fillColor: "#00ffba",
    fillOpacity: 0.4,
    editable: false
    });

    polygon.setMap(map);
    var zyx = x[i-4];
    obj = {
    'name':zyx,
    'area':polygon
    };

    google.maps.event.addListener(polygon, 'click', showArrays); //kattintásra megnyílik az infowindow
    google.maps.event.addListener(polygon, 'rightclick', function(event){
    showContextMenu(event.latLng,obj);
    });

    infowindow = new google.maps.InfoWindow();
    }
    }

    function showContextMenu(caurrentLatLng,obj) {
    var projection;
    var contextmenuDir;
    projection = map.getProjection() ;
    $('.contextmenu').remove();
    var a = "<a id='menu1'><div class='context'>Adatok szerkesztése</div></a>" +
    "<a id='menu2'><div class='context'>Körvonal szerkesztése</div></a>" +
    "<a id='menu3'><div class='context'>Törlés</div></a>";
    contextmenuDir = document.createElement("div");
    contextmenuDir.className = 'contextmenu';
    contextmenuDir.innerHTML = a;

    $(map.getDiv()).append(contextmenuDir);

    setMenuXY(caurrentLatLng);

    contextmenuDir.style.visibility = "visible";
    var x;
    x = obj.name;
    alert(x);


    $("#menu1").click(function(){
    alert("haha");
    });

    $("#menu2").click(function(){
    alert("haha");
    });

    $("#menu3").click(function(){
    alert("haha");
    });
    }

    A process_data függvényben megyek végig a tárolt adatokon, kirajzolom a kordináták segítségével a poligonokat és az obj nevű objektumban tárolnám az adataikat.
    A jelenlegi kódommal az a baj, hogy az utoljára kiszedett tömb elem adatai kerülnek csak bele.
    Valakinek van ötlete, hogy hogyan tudom megvalósítani ezzel a módszerrel, hogy később bármelyik polygonra kattintva be tudjam azonosítani, hogy az obj objektumban melyik paraméterek tartoznak hozzá? Sajnos arra nem találtam megoldást, hogy mondjuk adok egy id-t minden poligonnak és az alapján azonosítom az adatait?

    Ha valaki tudna segíteni, hogy ezt hogyan tudnám megoldani, nagyon hálás lennék. :R

    Próbálj meg így végigmenni a data tömbön:

    data.reverse().forEach(function(x){ ... })

    És az obj-t lokálisan hozd létre.

  • v2izzy
    tag

    Jaaaaaa, értem, jó, így már felfogtam.
    Szerintem erre nincs jobb, mintha stringként átadod úgy, ahogy a jQuery-nél lehet, pl. img tag dinamikus létrehozására a jQuery topicban épp mutattam példát: [link]
    valahogy hasonlóan kellene megoldanod, persze akkor alternatív utat kell választani, nem ilyen "függvényszerűen" lehet meghívni (pl. div() ).
    jQuery-kódban pl.:
    // If a single string is passed in and it's a single tag
    // just do a createElement and skip the rest
    .....

    Aztán a végére eljutsz oda, hogy felfedezed a spanyolviaszt, és készítesz egy új jQuery-t. :DD

    Ismerem a jQuery-nek ezt a funkcióját természetesen, de pont ez volt a célom vele, hogy egyszerűbben és szebben lehessen leírni a html-t js-be. És persze hogy elmehetnék jq-s irányba és string-ként átadhatnám, de pont nem ez a célom. A jQuery természetesen ezt csinálja, mert nekik nem ez a lényeg, hogy minden tag-hez külön fgv. stb. Pont ezért csinálom így, hogy valami pluszt adjon ez mondjuk a jQuery-shez képest. (Bár azért világmegváltó terveim nincsenek vele, de tanulásnak jó meg azért érdekesnek találom :) )

    És ha összehasonlítod:

    var img = $('<img />').attr({
    'id': 'myImage'+img_index,
    'src': 'http://doc.jsfiddle.net/_downloads/jsfiddle-logo.png',
    'alt': 'JSFiddle logo',
    'title': 'JSFiddle logo',
    'width': 250
    }).appendTo('#container');

    Ezzel:

    huk('#container')
    .img({
    'id': 'myImage'+img_index,
    'src': 'http://doc.jsfiddle.net/_downloads/jsfiddle-logo.png',
    'alt': 'JSFiddle logo',
    'title': 'JSFiddle logo',
    'width': 250
    })
    .append();

    Szerintem utóbbi szebb (de lehet mert én írtam :DDD )

    Meg azért nagy erőforrást nem emészt fel szerintem, minden tag-hez egy function pointert rendel, tehát nem klónozza a függvényeket a tag-ekhez. És akinek meg a custom tag kell (az esetek nagyon kis százaléka), annak meg arra is van lehetősége. Meg például a .list() fgv-t különösen hasznosnak találtam sokszor.

  • v2izzy
    tag

    "A komplett lista azért kell mert akkor tudom a prototypejába betenni az alap objektumnak a függvényeket (.div(), .span() stb)."
    Nem néztem meg a kódodat, és biztos most nehézkes a felfogásom, de most még mindig nem jön át, mi az oka, hogy a createElementes megoldás miért nem elegendő ehhez (tehát ha valaki divet szeretne kreálni, akkor document.createElement('div');). Mit hagyok ki? Mihez kell a komplett lista konkrétan?

    Példakódra rátérve: én amúgy nem értem, a megfelelő sorok végére miért nem teszel pontosvesszőt. :D Sokkal áttekinthetetlenebb így a kód, jó is, hogy a JSLint szól érte.
    A korábbi kódot, amit az oldaladról szedtem, elég gyorsan JSLint-validdá lehetett tenni:
    http://jsfiddle.net/Sk8erPeter/Pm6pg/1/
    Így már szerinte is okés (a class-ból 'class' lett, különben nem jó, mert foglalt névre hivatkozik a JSLint).
    Példa még mindig nincs a GitHub-oldaladon. :D
    Amúgy ha bejelentkezel a JSFiddle-oldalon, és ennél a kódnál rámész, hogy "Fork", akkor máris a Te neved alatt fog megjelenni. :)

    =========

    (#2578) Forza_JUVE :
    OK, nincs mit, ha kell segítség, akkor másold be ide a kódot, hogy mivel próbálkoztál, és segítünk.

    Itt egy példa. Látod, ha itt nem tudnám előre a neveket, akkor nem lehetne a függvényeket megcsinálni a megfelelő névvel az objektumba.

  • v2izzy
    tag

    Igen, ezt linkelted, de igazából ehhez nem nagyon értem, miért kellene neked a komplett lista.
    Azt meg nem tudtam, hogy stringből generálod le, és nem mondjuk egy document.createElement segítségével (nem néztem meg a kódot), pedig az lenne a logikus.
    Amúgy most hirtelen nem jut eszembe, mi az a DOM-elem, ami nem szokott működni, mondjuk ez nyilván böngészőfüggő, ergo IE-ben tuti csomó nem megy, de Chrome-ban ha csinálok egy ilyet:
    document.createElement('asd');
    Akkor létrehozza ezt:
    <asd></asd>
    Pedig ez nem egy "valid" tag a szokványos W3C-s DTD-k szerint - de miért ne lehetne ez teljesen valid egy saját DTD szerint?

    Mi ad vissza HTMLUnknownElement típust?
    Ha azt ad vissza, akkor miért nem dobsz vissza egyszerűen egy hibaüzenetet, hogy a megadott DOM-elem valamilyen oknál fogva nem megfelelő, adjon meg mást?

    A komplett lista azért kell mert akkor tudom a prototypejába betenni az alap objektumnak a függvényeket (.div(), .span() stb).
    Mikor elkezdtem csinálni, akkor még nem nagyon ismertem a DOM-ot, aztán így maradt eddig. :)
    Nekem nem az a gondom, hogy nem valid tagokat akarnak megadni, azzal semmi gond (most is van benn egy addTag fn. hogyha valakinek van valami mása. Csak azt írtam, hogyha pl. kiiratod, hogy:
    console.dir(document.createElement('asd'))
    akkor a visszakapott objektum típusa HTMLUnknownElement
    console.dir(document.createElement('div'))
    akkor HTMLDivElement.
    Ezzel csak azt akartam mutatni, hogy a valid tagok külön vannak kezelve, tehát valahol el vannak tárolva, hogy mik validok. De ez nem olyan lényeges, mivel ettől függetlenül is biztos el van tárolva. :))

    Lehet kellene csinálni egy jsFiddle-t, majd megnézem holnap, meg a jsLint-et is. Köszi!

  • v2izzy
    tag

    Hű, hát ez egy jó kérdés. Most hirtelen nem jut eszembe ilyenre megoldás, de egyébként mire kellene ez neked konkrétan?

    Plusz kíváncsiságból: milyen tagre akarnál esetleg tesztelni, amit egyik vagy másik böngésző nem támogat (úgy értem, pl. mit nem támogat adott böngésző, amire neked szükséged lenne)?

    Hát már régebben szerintem linkeltem, egy ilyen kis HTML kód generáló modulomhoz. Mert most ugye van egy tömb amibe összegyűjtögettem úgyahogy a tageket, de így azért mégsem az igazi. :)
    Amúgy lehet teljesen, de majd meg látjuk újra írom az egész modult, mert most csináltam egykét tesztet és úgy tűnt ha DOM-os függvényeket (createElement, appendChild stb) használok, akkor gyorsabb (ti is mondhatnátok véleményt ha van tapasztalat (most csak egy objektumból generálok le egy stringet és azt illesztem be)). Szóval ilyen függvényekkel hoznám létre a HTML-t.
    Nézegettem, és ugye a a createElement az bármilyen taget legenerál, de ha nem ismert az element akkor a visszaadott objektum HTMLUnknownElement típusú, viszont ha valami ismert, akkor HTML HTMLDivElement például. Tehát ezért is gondolom, hogy valamilyen módon benne vannak a létező tagek (meg hát amúgy is benne kellene lennie azért :) ), de jó lenne valahogy elérni őket.

    Speeedfire: ismerem, de mint fent írtam még nincs megoldásom. :)

  • v2izzy
    tag

    Szerintetek hozzá lehet jutni valahogy egy böngészőben az általa ismert HTML tagek nevéhez valahogy, például egy tömb formájában?

  • v2izzy
    tag

    Írtam egy kis modult, amivel lehet egyenlőségeket vizsgálni, és lehet készíteni saját kiértékelést is: [link]
    Nem tudom mennyire van értelme, majd meglátom mennyire érzem szükségét további programokban, de akit érdekel megnézheti! :)

  • v2izzy
    tag

    Sziasztok, lenne még egy kérdésem. A setTimeout vagy setInterval függvényekkel hogyan ismételtessek olyat, aminek van átadott értéke? Tehát ha van egy fv(i), azt hogyan ismételtessem 1 másodpercenként? Mert ha csak beírom, hogy setTimeout("fv(i)", 1000); akkor i is not defined..

    Alert-el kiírattam közvetlenül előtte az i-t és jó értéket adott, de a setTimeout nem veszi át az i-t.. Próbáltam úgy, hogy az i értékét átadtam egy másik változónak, majd így hívtam meg az fv()-t(fv(másik változó)), de akkor meg duplázza magát, és 2szeresen hajtja végre az utasításokat, esetemben 1 képet átugrik és a 2-vel arrébb lévőt cseréli ki..

    Nagyon köszi előre is a segítséget!

    String helyett rendes függvényt is átadhatsz (máskor is inkább így használd szvsz):

    var i = 123
    setTimeout(function() {
    console.log(i)
    }, 1000)

  • v2izzy
    tag

    Valaki ránézne erre? :)
    Az első pontot még beírja, de utána már nem. Érdekes, hogy ha később miután mozgattam a pontot, akkor már azt mondja, hogy a marker nem létezik...

    Így gondoltad? Tehát, hogy egy markert leteszel és ha azt mozgatod, akkor változik a pozíció? Vagy több markert letenni (ha így akarod akkor már tömbbel kell)?

  • v2izzy
    tag

    Sziasztok!

    A következő problémához kérném a segítségeteket.

    Van egy comboList-em:

    <form><select id="chtip">
    <option value="34">valami
    ...

    document.getElementById('chtip').value segítségével elérem a kiválasztott opció "value" értékét (itt 34) és tudok vele számolni. Viszont én egy opciónál két értékkel szeretnék számolni, vagyis pl. a "valami" kiválasztása esetén nem csak a 34-el, hanem egy másik hozzá tartozó értékkel is.

    A kérdésem az, hogy hogyan tudnék két "value"-t definiálni egy opcióhoz?

    Előre is köszi.

    Hello!

    Hát azt nem tudom, hogy lehet-e több value attribútomot vagy hasonlót adni egy elementnek (bár kétlem), de ha jól értelmezem, számomra az lenne a legegyszerűbb, hogy a value-ba egy speciális karakterrel elválasztom a két értéket, és amikor megkapom a value-t js-be akkor szétválasztom.
    Pl.: <option value="34_43">

    Remélem tudtam segíteni. :)

  • v2izzy
    tag

    Mit értesz "adott elem" alatt? :U
    "adott elemből" tudnék mondani egy párat... :D

    Pl. a konkrét problémám, hogy egy oldalon egy gombnyomásra előjön egy div középre pozicionálva és ha azon kívül kattintanak akkor zárja be, vagy mint pl. a facebook-nál ha az Account-ra kattintasz, akkor ha a megjelenő ul-en kívül kattintasz akkor eltűnik.
    Remélem már érthető. :)

  • v2izzy
    tag

    Hello!

    Valaki tudna nekem adni egy olyan kódot/függvényt, ami azt csinálja, hogy ha egy adott elemen kívül kattintok akkor pl. bezárja azt.

    A segítséget előre köszönöm! :R

  • v2izzy
    tag

    Hello!
    Egy olyan kérdésem lenne, hogy hogy kell címszerint átadni egy függvénynek?
    A választ előre köszönöm! :R

Új hozzászólás Aktív témák

Hirdetés