• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    KOMKnockout.js

    Knockout is a JavaScript library that helps you to create rich, responsive display and editor user interfaces with a clean underlying data model. Any time you have sections of UI that update dynamically (e.g., changing depending on the user’s actions or when an external data source changes), KO can help you implement it more simply and maintainably.

    24510
    rozbalit záhlaví
    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