AngularJS - zmena dát v inpute rubrika: Programování: JavaScript

2 Juraj Mlich
položil/-a 20.2.2015

Dobrý deň prajem,

pracujeme na vývoji aplikácie. Táto aplikácia funguje v prehliadači - kombinácia HTML, CSS a AngularJS. Táto aplikácia komunikuje s Java aplikáciou spustenou na pozadí pomocou HTTP požiadavkov.

Problém je ale následovný:

Máme položku, ktorej meníme meno. Meno uložíme (opustíme input), meno sa odošle Java aplikácii. Tá si uloží, že posledná zmena sa udiala práve teraz, a danú zmenu uloží do DB. Webová aplikácia každých 5 sekúnd kontroluje, či bola uskutočnená nejaká zmena (pomocou dát z Java appky). Pokiaľ áno, stiahne si celé dáta znovu. Po 5 sekundách od uloženia zmeny si skontroluje, či sa uskutočnila zmena. Tá sa ale uskutočnila, preto si stiahne celé dáta znovu. Problém je, že ak užívateľ počas tých 5 sekúnd niečo zmení, tak tie zmeny stratí.

Obecne by som sa chcel spýtať, ako by ste takýto spôsob výmeny dát riešili?

Ďakujem a prajem pekný deň :)

Komentáře

  • Milan Lempera : chápu to dobře, že chceš input, ve kterém se průběžně projevují změny ze serveru. Když do něj uživatel začne psát, tak se hodnota přestane aktualizovat a po opuštění inputu se zadaná hodnota odešle na server, ano? Má uživatel možnost svou změnu neodeslat, když už do políčka kliknul? Co když dojde k souběhu - uživatel opustí pole a o 10ms později přijde aktualizace ze serveru - přepíše mu to? Chci tím říct, že mi tvoje konstrukce přijde jako špatný návrh, navíc obvykle nechceš měnit data po jedné položce (a posílat RESTem zvlášť), ale pracuješ s nějakou entitou jako celkem, ve kterém potřebuješ konzistenci. Odpověz mi na uvedené otázky a já ti ukážu jak to jde řešit v angularu, ale to co navrhuješ je imho nestabilní sdílená položka, která se bude chovat divně, ať ji napíšeš v čemkoli. (mimochodem nebylo by lepší použít websockety, místo neustálých checků serveru?) 21.2.2015
odkaz
4 VirtualSkiper
odpověděl/-a 7.3.2015

Skoro bych se pridal k tomu ze to neni otazka Angularu, ale navrhu. V podstate by sis mohl vetu vytahnout z kolekce do objektu, ktery obsluhuje formular. Potom mas nekolik moznosti jak se vyporadat s nekonzistenci. Asi bych to delal tak, ze bych zmenu PUToval vuci serveru a v callbacku (kdyz jses si jistej, ze databaze fresh) zaznam vratis i do kolekce. Pokud callback obsahuje i obsah noveho/freshnuteho zaznamu tak ho pouzij, nebo si musis pomct s objektem, ktery jsi PUToval.
Fakt nevim jak funguje ten test konzistence mezi lokalem a serverem, ale jedna nebo druha strana by tu kolekci mela prepsat.

Pro zobrazení všech 5 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.