tömb rendezés + összehasonlítások száma

2009.12.05. 10:18 stack

Az elmúlt hetekben több helyen is találkoztam ehhez hasonló mintakóddal, mivel az eredményeken jót mosolyogtam, gondoltam én is kiteszem. Nagy jelentősége persze nincsen, csupán érdekesség.

Adott egy 1000 elemű tömb, benne az elemek növekvő sorrendben. Vajon az egyes böngészők hány összehasonlítást használnak rendezés közben?

var list = [];
for (var i = 0; i < 1000; i++) {
    list.push(i);
}
var count = 0;

list.sort(function(a, b){
    ++count;
    if (a < b) {
        return -1;
    }
    if (a > b) {
        return 1;
    }
    return 0;
});

alert(count);

Az eredmények:

Szólj hozzá!

Címkék: sort array nem extjs

String.isJSON()

2009.12.01. 22:58 stack

Egy string-ről legkönnyebben úgy tudjuk megállapítani, hogy JSON vagy sem, hogy megpróbáljuk átalakítani. Ha sikerült, akkor az, ellenkező esetben pedig nem, ilyen egyszerű. :)

Ext.override(String, {
    isJSON: function () {
        try {
            Ext.decode(this);
            return true;
        } catch(e) {
            return false;
        }
    }
});

Szólj hozzá!

Címkék: override string json

Store.toJSON()

2009.11.26. 23:20 stack

Store teljes tartalma JSON alakban:

Ext.override(Ext.data.Store, {
    toJSON: function () {
        var items = [];
        this.each(function (record) {
            items.push(Ext.encode(record.data));
        });
        return '[' + items.join(',') + ']';
    }
});

Szólj hozzá!

Címkék: store override json

is_ajax ()

2009.11.24. 23:24 stack

Szerver oldalon a lekérés fejlécéből állapítható meg, hogy Ajax hívásról van-e szó vagy sem:

function is_ajax () {
    return isset($_SERVER{'HTTP_X_REQUESTED_WITH'})
        and $_SERVER{'HTTP_X_REQUESTED_WITH'} === 'XMLHttpRequest';
}

1 komment

Címkék: ajax php header

Ext.util.Observable.capture

2009.11.22. 14:24 stack

Hibakeresés közben hasznos, ha az ember nyomon tudja követi, hogy egy-egy komponens milyen eseményeket vált ki, milyen paraméterekkel. Erre egy egyszerű megoldás az Ext.util.Observable.capture használata:

var win = new Ext.Window({
    title: 'Szerbusz világ!',
    width: 200,
    height: 50
});

Ext.util.Observable.capture(win, function () {
    console.log(arguments);
});

win.show();

Annyi megjegyzés még, hogy az itt megadott függvény a többi callback függvény előtt hívódik meg.

6 komment

Címkék: event capture

conditional compilation

2009.11.19. 20:54 stack

Nem is tudtam, hogy az IE-ben nem csak HTML kommenteknél lehet feltételeket használni, hanem JavaScript kommenteknél is. A HTML feltételes komment:

<!--[if IE 6]>
ezt csak IE6 alatt látni..
<![endif]-->

Minap valami buta hacker fórumra büszkén írta be valaki a legújabb felfedezését:

<script type="text/javascript">
//@cc_on alert("Hello IE!");
</script>

És láss csodát: IE alatt lefut a kommentben lévő alert. Azon túl, hogy először meglepődve néztem, második nekifutásra azért mégsem nevezhetjük ezt sem hack-nek, sem bug-nak. HTML-ben ismert feltételes kommentekhez hasonlóan JavaScript-ben is van feltételes fordítás. (conditional compilation) És mindezt a @cc_on -nal lehet bekapcsolni.

Szólj hozzá!

Címkék: comment

Array.indexOf - IE vs. FF

2009.11.15. 09:45 stack

A JavaScript keretrendszerek egyik nagy előnye, hogy a fejlesztőket megkímélik a különböző böngészők sajátosságaitól. Szerintem ez az Ext JS-re különösen igaz. Mégis, minap egy furcsa hibába ütköztem:

var a = ['0', '1', '2'];
alert(a.indexOf(1));

Míg Firefox a natív függvényt használja, addig az IE az ExtJS-ben definiáltat. Az elsőben van típusellenőrzés, míg a másodikban nincsen.

Szólj hozzá!

Címkék: array indexof

Fa ikonok nélkül

2009.10.26. 19:07 stack

Már régóta problémának éreztem, hogy a fában az egyes csomópontokhoz mindenképpen tartoznak ikonok. Semmi gond nincs az alapértelmezett ikonokkal, de sok esetben egyszerűen nem illenek oda, keresni hozzá megfelelő ikonokat meg időigényes. Ráadásul egyáltalán nem garantált, hogy a keresett ikonok odaillőek lesznek. Nagyobb kaliberű átalakítás nélkül nem oldható meg, hogy az ikonhoz tartozó kép ne kerüljön be a HTML-be. (TreeNodeUI.renderElements, sajnos nem a this.tpl -t használja:)

3 komment

Címkék: tree icon hidden node

Dinamikus CSS szabályok

2009.10.10. 23:53 stack

Ha olyan komponenst gyártunk, amelyhez legfeljebb 2 vagy 3 CSS szabály tartozik, akkor joggal megfordul az ember fejében, hogy ehhez felesleges külön .js és külön .css fájl. Azt a néhány szabályt dinamikusan is hozzá lehetne adni a rendszerhez. Teljesítmény csökkenésről szerintem értelmetlen beszélni, ellenben átláthatóbbá válna a komponensünk, ha a hozzá tartozó részek egy helyen lennénk. (természetesen a különválasztást továbbra is megtartva). És nem utolsó sorban, ha a szerver oldali keretrendszer nem kezeli külön, akkor oldalletöltésnél kevesebb kérés menne a szerverhez.

A triviális megoldás az lenne, hogy:

var style = 'body {color: blue; font-weight: bold; padding: 10px;}';
Ext.util.CSS.createStyleSheet(style);

Ám ezzel az a probléma, hogy nem definiálható CSS-sel felül. (és most IE miatt tekintsünk el az !important-tól, vagy képzeljünk oda olyan CSS szabályokat, amelyek használnak !important-ot)

2 komment

Címkék: css

Native JSON

2009.10.03. 23:52 stack

A JSON formátum ellen a leggyakoribb kritika az eval miatti sebezhetőség. Én ezt túllihegett problémának érzem. De kétségtelen, hogy előfordulhat olyan példa, amikor kellemetlen következménye lehet a JSON értelmezés közben alkalmazott eval használatának. (bár ilyen eseteknél nem az eval az egyedüli probléma) Talán emiatt is lehetett, hogy nemrégibben több böngészőgyártó a JavaScript-hez hozzáadta az un. natív JSON kiegészítést. Így már az eval helyett használhatja az ember a beépített JSON elemzőt.

Amiért ez számomra érdekes volt, hogy meglepően gyorsabb az eval-nál.

Szólj hozzá!

Címkék: eval json

ExtJS blog, mi ez?

Az ExtJS egy JavaScript keretrendszer, melyet a blog írója elfogultan a legjobbnak tart, és ez a blog olyan apróságok gyűjteménye, melyek ExtJS használata közben felmerültek, eszébe jutottak...

Címkék

ajax (4) alignto (1) állás (3) analytics (1) anchorto (1) android (4) animate (2) array (9) auto (1) back button (1) beautifier (1) beforeevent (1) benchmark (1) blur (1) budapest.js (1) button (1) canvas (1) capture (1) case sensitive (1) center (1) change (1) cikkajánló (1) class (2) closure compiler (1) collapse (1) combobox (3) comment (1) console.log (2) contextmenu (2) core (2) count (1) css (15) csv (1) dataview (1) date (4) datefield (3) datepicker (1) debug (1) doksi (1) dragdrop (1) easing (1) eclipse (1) editor (1) element (5) error (5) eval (2) event (1) fejtörő (1) field (2) fieldset (1) filter (1) firefox (4) firefox extension (2) focus (3) fonts (1) fun (1) function (1) google (2) google chrome (1) grayscale (1) grid (4) group contact (1) header (3) height (2) hidden (1) hirek (2) history (1) htaccess (1) html5 (2) htmleditor (2) https (1) icon (3) id (2) ie (2) ie6 (1) ie9 (1) iframe (3) image (2) indexof (1) javascript (1) jquery (2) jslint (2) jsmin (1) json (7) keymap (1) kipróbálom (2) könyvajánló (2) label (1) layout (1) lint (1) log (1) loop (1) magyar (2) mandelbrot (1) mask (1) math (1) maxlength (1) mistake (1) mysql (5) napi szívás (16) nem extjs (12) node (1) nth child (1) number (1) off (5) offline (1) operator (1) override (20) pagesize (1) paging (2) panel (2) php (7) picker (1) plugin (3) pozicionálás (2) preload (1) print (1) propertygrid (1) pseudo (3) readonly (2) record (1) regexp (1) replace (1) resizable (1) rotate (1) round (1) scale (1) sencha touch (2) server (1) shuffle (1) slider (1) sort (3) sortable (1) store (2) string (7) sum (1) tabchange (1) tabpanel (1) tab key (2) tdd (1) template (1) textarea (2) textfield (1) textitem (1) theme (2) throw (1) timer (1) timestamp (1) title (2) toggle (1) toolbar (6) tools (1) total count (1) transparent (1) tree (1) treenode (1) trigger (1) truncate (1) try (1) ucfirst (1) undefined (2) unique (1) unload (1) urlencode (1) utf8 (2) verzió (1) video (1) viewer (1) viewport (2) visible (2) vtype (1) window (2) xtype (1) zindex (2)

Extjs.blog.hu - RSS

Kérdés?

süti beállítások módosítása