• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    KOMKnockout.js
    KOM
    KOM --- ---
    RAPTORCZ: Pokusim se ti neco vyzobat, myslim ze mam nekde ulozeny takovy "boilerplate"...
    RAPTORCZ
    RAPTORCZ --- ---
    KOM: Nemáš někde nějakou ukázku použití/článek o tom? RequireJS ani AMD atd. jsem nikdy nepoužíval. Potřebuju teď prostě jen do ViewModelu nějak nadefinovat, jakou si to má načíst šablonu a nechci ji mít ve stránce. Už jich je moc :-)
    KOM
    KOM --- ---
    KEDRIGERN: Nevim zda tomu rozumim spravne problemu, ale pokud zmenis u druhyho inputu binding z "attr: checked" na "checked", tak to asi dela to co ma delat ne? http://jsfiddle.net/epn4qgbt/2/
    KEDRIGERN
    KEDRIGERN --- ---
    KEDRIGERN: Zde jsem extrahoval problém: http://jsfiddle.net/keddie/epn4qgbt/ Teď chci, aby byl vždy zaškrtnut jeden řádek. Klíká se na druhý sloupec (abych tam pak mohl dobře použít i zaškrtnutí intervalu).

    Budu rád za rady, jak vyřešit. Když v console změním hodnotu observable, tak se vše provede dobře. Když to jde přes click event, tak zůstane původní zaškrtnut.
    KEDRIGERN
    KEDRIGERN --- ---
    KOM: Trochu jsem si s tím pohrál. Výsledek je zde: http://jsfiddle.net/keddie/22e4h9wo/
    Na klik bez klávesy to zaškrtává vždy jeden řádek, na shift interval. Nicméně u kliku bez klávesy mám problém s tím, že se mi neodškrtává checkbox. Hodnota je v pořádku, ale checkbox zůstane zaškrtnutý. Přitom z console, když dám $data.isSelected(false), tak to funguje správně.
    KOM
    KOM --- ---
    RAPTORCZ: Ja pouzivam Require.js a Require Text modul. Mam HTML sablonu zvlast a injectuju ji pomoci JS do DOMu.
    RAPTORCZ
    RAPTORCZ --- ---
    Jaké používáte template systémy, pro případné načtení template z externího souboru? Zatím mám vše v jednom souboru, ale občas uvažuju, že bych je raději měl bokem, kvůli rychlejší aktualizaci.
    KOM
    KOM --- ---
    KEDRIGERN:

    Precetl jsem si znova co presne potrebujes, sorry. Pokud ti jde o to pouzit SHIFT a oznacovat intervaly, tak bych asi nabindoval nejakou metodu na kazdy checkbox, ktera by toto resila, treba nejak takhle...

     function handleSelection (data, event) {
      if (event.shiftKey) {
        // check jestli uz je neco vybrano
       lastChecked = null;
       items.forEach(function (item) {
        // pokud neco checknu, ulozim si index
       });
    
       if (lastChecked) {
         // od posledniho oznacenyho az po ten na ktery jsem kliknul, vse oznacim
       } else {
         // oznacim tento checkbox
         data.isChecked(true);
       }
    
      } else {
        // oznacim tento checkbox
        data.isChecked(true);
      }
    } 
    
    KEDRIGERN
    KEDRIGERN --- ---
    KOM: Ale já chci intervaly, ne jen všechny. A navíc ještě intervaly např. od 5. do 10. elemnentu (dle posledního a aktuálního kliknutí).

    Něco jako tohle: http://rmariuzzo.github.io/checkboxes.js/#range-selection-of-checkboxes

    Akorát když to dělám přes JQuery, tak se to bije s knockout modelem. Možná by to šlo nějak chytře zkombinovat. Nevím. Kdykoliv něco napíši, tak se mi ten kód nelíbí a funkcionalita také není stoprocentní.
    KOM
    KOM --- ---
    KEDRIGERN:

    Pokud mas objekty v poli, tak to jde poresit nejak takto.

    Template:
    <button data-bind="click: checkAll">Check all</button>
    <!-- ko foreach: items -->
    <input type="checkbox" data-bind="checked: isChecked">
    <!-- /ko -->
    


    VM:
    var items = ko.observableArray([{id: 1, isChecked: ko.observable(false)}, {id: 2, isChecked: ko.observable(false)}, ...]);
    
    function checkAll() {
      items.forEach(function (item) {
        item.isChecked(true);
      });
    }
    
    KEDRIGERN
    KEDRIGERN --- ---
    Řeším takový problém.

    Mám objekty, které mají nějakou vlastnost. Např.:
    isChecked = ko.observable(false)

    Pak mám tabulku, kde dané objekty vykresluji. V jednom ze sloupců je checkbox:
    input type="checkbox" data-bind="checked: isChecked"

    A rád bych implementoval hromadné zaškrtávání checkboxů jako to má např gmail. Čili když zmačknu shift, tak se zaškrtne interval od posledního zaškrtnutého.

    Implementoval jsem to skrz JQuery, ale je to celé špatně. Absolutně mi nejde rozumně spojit JQuery model s knockoutem. Jak byste to řešili?
    RAPTORCZ
    RAPTORCZ --- ---
    Neřešil náhodou někdo použití modalu z Bootstrapu verze 3.x ve spojení s Knockoutem?
    KOM
    KOM --- ---
    FIKOTEK: S backone.js jsem jeste nepracoval, ale z tech prikladu co jsou v tomto clanku tak se mi opravdu nelibi mit DOM reference ve View Modelu. Radeji mam vse rozdelene a teoreticky mohu napojit na view modelu jinou sablonu nebo jiny model a vse by stale melo fungovat...
    KOM
    KOM --- ---
    KEDRIGERN: Ja se snazim dodrzovat "Single responsibility", takze mam radeji vice subscribu, handleru nez nejake komplikovane reseni. Napriklad ViewModely se snazim delat velice male a mit jich radeji vice, ale mit v tom prehled.
    KEDRIGERN
    KEDRIGERN --- ---
    KOM: Souhlas, máme to špatně rozvržené. Ale považuji za relativně těžké vyrobit rozumný návrh. Hodně by mi pomohl alespoň ES6. Zčásti používáme Coffee script.

    Problém je např. kde navěšovat subscriby, jestli jich mít raději víc, nebo jeden a tam mít další funkce...
    RAPTORCZ
    RAPTORCZ --- ---
    Tak uvidíme, co se tady dozvím :-) Zatím mám Knockout nasazený na test jen v jednom projektu a aby to nebylo tak složité, tak je to součást WebForms aplikace :-D Nejlepší je učit se na reálné situaci. Ale zatím mi teda příjde, že pokud má člověk nějaký složitější viewmodel (myšleno pokud obsahuje kolekce, které obsahují kolekce atd.) tak to je dost peklo. Ale možná to vychází jen z toho, že to moc zatím neumím a dělám to špatně nebo zbytečně složitě.
    KOM
    KOM --- ---
    KEDRIGERN: Asi bych musel videt ukazky kodu. Momentalne Knockout pouzivame na docela velkem projektu s mnoha ViewModelama a na tento problem jsme nenarazili...
    KEDRIGERN
    KEDRIGERN --- ---
    Používám na středně velkém projektu. A máme dost problém jak udržet kvalitu kódu. Event driven programování je dost zlo...
    KOM
    KOM --- ---
    Vitejte v nove zalozenem klubu o javascriptove knihovne Knockout.js :)
    Kliknutím sem můžete změnit nastavení reklam