/ / Viazanie začiarkavacích políčok v stromovom prehľade so začiarkavacími políčkami, ktoré používajú vzdialený zdroj údajov - kendo-ui, kendo-treeview

Viazanie začiarkavacích políčok v stromovom zobrazení pomocou začiarkavacích políčok, ktoré používajú vzdialené zdroje údajov - kendo-ui, kendo-treeview

Dovoľte mi usporiadať situáciu tu. Mám situáciu, keď musím ukázať niekoľko začiarkávacích políčok vo formulári, ktorý je svojou povahou hierarchický z hľadiska toho, že niektoré z nich patria do jednej kategórie a iné do druhej a tak ďalej. Mojím prvým nápadom bolo použitie stromového prehľadu KendoUI so zaškrtávacími políčkami. Vo vzťahu k tomu mám niekoľko otázok:

  1. očividne nastane situácia, keď na apri načítaní formulára je potrebné začiarknuť niektoré začiarkavacie políčka, pretože pochádzajú podobne ako zo zdroja údajov. Keď definujem nový súbor kendo.data.HierarchicalDataSource, existuje vlastnosť, ktorá mi umožňuje určiť, ktorá vlastnosť v zdroji údajov definuje hierarchiu „ParentID“, a ďalšiu, ktorá upozorní, či konkrétna položka obsahuje nejaké podradené položky „hasD Children“. Nevidím, či existuje vlastnosť nazývaná „začiarknuté“ alebo niečo, čo by umožnilo rovnakú väzbu so zdrojom údajov rovnakým spôsobom. Existuje jeden a ako to nastavím?
  2. Za predpokladu, že odpoveď na prvú otázku je NIE, tak som doteraz ručne označil jednotlivé začiarkavacie políčka v udalosti dataBound treeview takto:
    $(e.node).find(":checkbox[isselected="true"]").prop("checked", true);

Čo to robí, je prejsť zaškrtávacími políčkami v uzle a skontroluje, či majú atribút s názvom „isselected“ (ktorý vyplním pomocou šablóny začiarkavacieho políčka) a či je nastavený na true potom začiarknite toto políčko. Funguje to tak, ako by malo, ale problém sa stane, keď chcem zaúčtovať začiarknuté políčka späť na server. Začiarkavacie políčka vybraté pomocou vyššie uvedeného kódu sa neodrážajú v zdroji údajov stromu. Teraz musím prísť na to, ako to urobiť. Putoval som, či by to bolo namiesto elegantnejšieho riešenia elegantnejším riešením: manuálne začiarknite políčka -> udalosť požiaru na každom zaškrtávacom políčku, aby ste aktualizovali svoj zdroj údajov „isselected“ alebo zdroj údajov o stromoch -> pri účtovaní hodnôt získajte všetky skontrolované hodnoty.

Ďakujeme za pomoc.

odpovede:

4 pre odpoveď č. 1

Kým na to niekto čaká s inteligentným riešením, dovoľte mi pridať to, čo som zistil, aby som to fungoval, aby som mohol pomôcť ľuďom, ktorí narazia na rovnaké problémy.

Pozrite sa na nasledujúce Príspevok na fóre KendoUI a odpoveď Atanas z tímu KendoUI, v ktorejvysvetľuje, ako sa dostať k položke zdroja údajov a označiť konkrétnu položku správnym vlastníctvom. Bolo to užitočné, aby sa ručne aktualizoval zdroj údajov po tom, ako používateľ zmenil výber konkrétnych políčok.

Tiež sa pozrite na nasledujúce Príspevok na fóre KendoUI pre vysvetlenie, ako správne usporiadať šablónu začiarkavacieho políčka, aby sa mohla správne POST vrátiť späť.

S týmito dvoma tipmi som bol schopný získať IDzačiarknuté políčka POSTed späť do ovládača. Celkový kód JavaScript na strane pohľadu, ktorý to robí, je teraz okolo 80 riadkov kódu vrátane definície modelu. Aj keď to nie je príliš veľa, stále je toho príliš veľa, ak existuje múdrejší spôsob, ako niekto môže odporučiť.


1 pre odpoveď č. 2

Ahoj v predvolenom nastavení používa stromová kontrola tzv. Začiarknuté políčko.

Takže vo vašom modeli pohľadu

public class MenuItemViewModel
{
public bool @checked { get; set; }
}

Potom, keď vyplníte svoj viewmodel z vašej databázy, uistite sa, že vracia správny stav.

tu zadajte popis obrázku

Ak nechcete pridať začiarknuté do svojho modelu zobrazenia

Potom ju môžete namapovať na zdroj údajov

   dataSource: new kendo.data.HierarchicalDataSource({
data: kendo.observableHierarchy([]),,
schema: {
model: {
fields: {
checked: {from: "WHATEVERYOUWANT", type: "boolean"}
}
}
}
}),
dataTextField: "Name",
checkboxes: true
  public class MenuItemViewModel
{
public bool WHATEVERYOUWANT { get; set; }
}