Autor Zpráva
Darker
Profil
Vytvořil jsem jednoduchou aplikaci, a právě proto, že je jednoduchá, chtěl jsem jí naivně zoptimalizovat v IE. Už jsem to totiž dlouho nedělal a tak jsem docela zapoměl co to obnáší.
Problém přes který jsem se nedostal, jelikož IE nehlásí žádné chyby je nespuštění funkce po načtení dat na začátku testu slovíček. Funkce je na řádku 185 v main.js, v ostatních prohlížečích samozřejmě žádný problém. Požadavek se podle konzole IE odešle.
Chamurappi
Profil
Reaguji na Darkera:
Co přesně musím udělat, abych problém viděl? Nejde ukázku zjednodušit tak, aby byla závada zjevnější? Osekat nesouvisející?
Darker
Profil
Stačí vybrat jazyk, klepnou na slovník a kapitolu. Objeví se tlačítko. Ve firefoxu a Opeře tlačítko aktivuje takové zelené okýnko. V IE se nic nestane a nedostanu žádnou chybu. Konstrukce chybové části vypadá takto:
function Game() {
     var _this = this;
     this.init = function() {           
        $.post("post.php", {/*data*/}, function(data){ /*TOHLE SE NESTANE, server ale vrátí korektní odpověď, kontroloval jsem to v IE konzoli.*/});
     }
}
Nevím, jestli IE má problém s tím, že v callbacku pracuju s _this, nicméně mi ani nevyskočil vepsaný alert či změna document.title i když jsem všechno ostatní smazal.
Metoda .init i pořadavek se provedou a to správně, tím to v IE končí.
_es
Profil
Darker:
V main.js máš:
Game.prototype = {
    get qid() {
        return this._qid;
    },
    set qid(val) {
        this._qid = val;
        this.info.qid.data = val;
                this.info.rest.data = this.mqid-val; 
                //alert(val);
                 
    }
};
Príkazy get a set v ECMAScript 3 neexistujú.
Darker
Profil
A jak teda pro IE nastavím getter a setter? Když jsem se teď pozorněji začetl do článku kde jsem se je naučil používat zjistil jsem že IE skutečně v seznamu kompatibilních prohlížečů chybí....
Edit: Už asi nic - http://robertnyman.com/2009/05/28/getters-and-setters-with-javascript-code-samples-and-demos/
_es
Profil
Darker:
Tie príkazy nefungujú aj v starších verziách iných prehliadačov, nielen v IE. Najistejšie je používať len syntax a príkazy ECMScript 3.

IE nehlásí žádné chyby
Mne zobrazí pri chybe v JS v okne vľavo dole ikonu na ktorú môžeš kliknúť a zobraziť o akú chybu ide. Okrem toho má IE (8) aj vývojárske nástroje na JS.
Darker
Profil
Na odkazovaném článku jsem našal pro IE řešení přes Object.defineProperty - použil jsem jej bez jakéhokoliv výsledku - nehlásí chyby a nic nedělá.
Aktuální řešení (co nic neřeší) vypadá takto:
if(document.all == null) {
 Game.prototype = {
     get qid() {
         return this._qid;
     },
     set qid(val) {
         this._qid = val;
         this.info.qid.data = val;
               this.info.rest.data = this.mqid-val; 
                //alert(val);
                 
     }
 };
}
else {
 Object.defineProperty(Game, "qid", {
   get : function () {
     return this.qid;
   },
   set : function (val) {
         this.qid = val;
         this.info.qid.data = val;
               this.info.rest.data = this.mqid-val; 
  }
 });
}
O nějakém univerzálním řešení tam nepíšou a toto buď nefunguje, nebo je problém ještě někde.
_es
Profil
Darker:
O nějakém univerzálním řešení tam nepíšou
Univerzálnym riešením je, viď už [#6], používať len ECMScript 3.

toto buď nefunguje
V prehliadačoch neznajúcich tie príkazy vyvolá chybu.
Darker
Profil
A tam se to dělá jak?
_es
Profil
Darker:
A tam se to dělá jak?
Cez funkcie (metódy).
objekt.nastavVlastnosťX(hodnotaX);
y=objekt.zistiVlastnosťX();
Darker
Profil
To už ale není žádný getter a setter. Chtěl jsem se vyhnout přepisování celého programu. Asi to stejně udělám a na IE se vykašlu a pro příště si dám pozor...
Chamurappi
Profil
Reaguji na Darkera:
To už ale není žádný getter a setter.
Proč potřebuješ, aby to byly gettery a settery? Zbytek tvého kódu se stejně v krásách OOP moc nerochňá, tak proč zrovna tohle vnímáš jako zásadní?
Darker
Profil
Chamurappi:
Zbytek tvého kódu se stejně v krásách OOP moc nerochňá
Ocením když mi řekneš kde jsem vynechal možnost využít OOP.

proč zrovna tohle vnímáš jako zásadní?
Protože už to tam je a nechce se mi to měnit zpět. Možnost změnou hodnoty aktivovat funkci která změnu aplikuje na související hodnoty samozřejmě člověk ocení. Tady je progressbar, když změníš vlastnost perc (0-100, v dokumentu window.bar.perc) zobrazí se počet procent rovnou do html. Prostě se mi to líbí víc než volat bar.setPerc a mít tam možnost že zobrazený počet procent nebude souhlasit s počtem procent v objektu.
_es
Profil
Darker:
Možnost změnou hodnoty aktivovat funkci která změnu aplikuje na související hodnoty samozřejmě člověk ocení.
Ale ono to je naopak. Volanie funkcie je zamaskované za zmenu či zistenie hodnoty.

Prostě se mi to líbí víc než...
Je to vlastne to isté, len tam buď sú alebo nie sú okrúhle zátvorky.
Darker
Profil
_es:
Je to vlastne to isté, len tam buď sú alebo nie sú okrúhle zátvorky.
Čím míň závorek tím líp. S vlastností se dá lépe pracovat, nic jako getPerc()+= 10 nebude fungovat.
_es
Profil
Darker:
nic jako getPerc()+= 10 nebude fungovat.
A to je taký problém x+=10 rozpísať na x=x+10?

S vlastností se dá lépe pracovat
Tá „vlastnosť“ je aj tak vždy len skryté volanie dvoch funkcií. Ak ti to stojí za to, aby to polovici návštevníkov nefungovalo, tak teda tie dva príkazy použi.

Vaše odpověď

Mohlo by se hodit

Nezapomeňte na odkaz na živou ukázku problému.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: