Undo v JavaScriptu


14-05-2012 00:00 - Zdroj: php.vrana.cz
Nedařilo se mi najít aplikaci na telefon pro počítání baseballového skóre, která by mi zcela vyhovovala. A tak jsem si zcela v duchu Not Invented Here během půl hodinky spíchnul vlastní (což byla kratší doba, než jsem předtím strávil hledáním). Aplikaci jsem napsal v JavaScriptu a není na ní dohromady nic zajímavého. Tedy kromě jedné věci. Některé aplikace mají kromě tlačítek na přidání skóre také tlačítko na jeho odebrání. To pro případ, že se člověk uklepne. Stejně tak vedle přidání autu je jeho odebrání. A tak dále. Uživatelské rozhraní se tím příšerně komplikuje a naopak svádí k chybám, protože se někdy uklepnu a místo přidání skóre ho umylem uberu, takže pak ho musím přidat dvakrát, abych chybu napravil. Některé operace (jako změna směny po třech autech) navíc nejdou vrátit vůbec. Ne, ne, já potřebuji jednu funkci zastrčenou někde pěkně v rohu, která bude schopná vrátit cokoliv. Prostě klasické undo. Jeho implementace v JavaScriptu je jednoduchá díky tomu, že funkce jsou first-class citizens. Jak vypadá základní myšlenka? var undoStack = []; var score = 0; function addScore() { score++; undoStack.push(function () { score--; }); } function undo() { if (undoStack.length) { undoStack.pop()(); } } Díky viditelnosti proměnných můžeme funkce i snadno skládat dohromady: var team = 'visitor'; var outs = 0; var inning = 1; function addOut() { var old = outs; var undoTeam = function () { }; outs++; if (outs >= 3) { outs = 0; if (team == 'visitor') { team = 'home'; undoTeam = function () { team = 'visitor'; }; } else { team = 'visitor'; inning++; undoTeam = function () { team = 'home'; inning--; }; } } undoStack.push(function () { outs = old; undoTeam(); }); } Přijďte si o tomto tématu popovídat na školení JavaScript a AJAX. - Pokračovat...
addthis





Poslední příspěvky z blogu:
php.vrana.cz



Zašlete svůj blog
Požadavky na Blog
Ochrana osobních údajů
Kontakty

This site uses Thumbshots previews