2016-06-15 4 views
0

Im Folgenden finden Sie den Code/Daten, die als JSON zurückgegeben Baum auf Kendo Liste:Kendo UI TreeList Controller-Aktion mehrmals auf Expanding Node aufrufen?

var item = new IncomeStatementHierarchyItemModel() 
         { 
          id = GroupId, 
          parentid = Id.Value, 
          HasIndent = 0, 
          Title = drow[2].ToString(), 
          Actual = GetDataRowValueForPSA(dt, drow[2].ToString(), 3, 2), 
          Prior = GetDataRowValueForPSA(dt, drow[2].ToString(), 4, 2), 
          Budget = GetDataRowValueForPSA(dt, drow[2].ToString(), 5, 2), 
          Forecast = GetDataRowValueForPSA(dt, drow[2].ToString(), 6, 2), 
          PriorQuarter = GetDataRowValueForPSA(dt, drow[2].ToString(), 7, 2), 
          PSAClassification = psaClassification, 
          hasChildren = true 
         }; 

Id und parentId zu Baum richtig eingestellt ist, aber nachdem die Daten auf Baum wieder Bindung Controller Aktion wird für den nachfolgenden Artikel aufgerufen.

Transportfunktion wird verwendet, um die Datenquelle zu erstellen:

var drillDownDataSource = new kendo.data.TreeListDataSource({ 
     transport: { 
      read: { 
       url: urlAction, 
       dataType: "json", 
       type: "POST", 
       async: true, 
       cache: true, 
       autoBind: true, 
       data: function() { 
+0

Was ist die Frage? – MDDDC

+0

natürlich !!!! Es sollte nicht mehrmals aufgerufen werden. –

+0

Nun, nach ihrer Dokumentation, wenn Sie Kendo Baum Ajax Stil implementieren möchten, wird es jeden Knoten abhängig von LoadOnDemand Eigenschaft aufrufen, wenn dies auf true gesetzt ist, wird diese Methode nur aufgerufen, wenn Sie auf Knoten erweitern klicken, wenn LoadOnDeman = false, Diese Methode wird für alle Knoten in Document Ready aufgerufen. – MDDDC

Antwort

1

Weil Eltern Id bedeutet nicht, zu viel für Kendo Baum hier ist das, was Sie zu tun, um brauchen einen Kendo Baum arbeitet in einem bekommen gute und richtige Art und Weise.

1.You muss ein Modell haben, die wie folgt aussieht:

public class KendoTreeViewItem 
    { 
     //required properties: 
     //property names are lower case because I am planning to convert to 
    //javascript array and at that point kendo is looking for lower case properties. 
     public string id { get; set; } 
     public bool expanded { get; set; } 
     public bool @checked{get; set; } 
     public IList<KendoTreeViewItem> Items{get;set;} 
     public string text{ get; set; } 
     public bool hasChildren{get;set;} 
     public bool hasChildren{get;set;} 
     //Add other custom properties   
    } 

2.As ich oben erwähnt, ParentId ist nicht zu wichtig, auf kedno Baum, aber wir werden es verwenden, um Konstruiere aus einer flachen Liste eine echte Baumstruktur, die von Kendo Baum verwendet wird.

Falls Sie dies bereits haben, überspringen Sie diesen Schritt. Sie können es so etwas mit tun:

public static class KendoTreeHelpers 
    { 
     public static List<KendoTreeViewItem> ToKendoTree(this IList<KendoTreeViewItem> flatList) 
     { 
      Dictionary<long, KendoTreeViewItem> dic = flatList.ToDictionary(n => n.ItemId, n => n); 
      var rootNodes = new List<KendoTreeViewItem>(); 
      foreach (var node in flatList) 
      { 
       if (String.IsNullOrEmpty(node.ChildrenIds)) 
       { 
        node.Items = null; 
       } 
       if (node.ParentId.HasValue) 
       { 
        var parent = dic[node.ParentId.Value]; 
        node.ParentId = parent.ItemId; 
        parent.Items.Add(node); 
       } 
       else 
       { 
        rootNodes.Add(node); 
       } 
      } 
      return rootNodes; 
     } 
    } 

3.So Ihre Methode in der Steuerung sollte wie folgt aussehen:

public ActionResult DisplayTree() 
     { 
      IList<KendoTreeViewItem> flatList = GetFlatList();//your method to get list. 
      IList<KendoTreeViewItem> tree = flatList.ToKendoTree(); 
      return View(tree); 
     } 

4.View

@model IList<KendoTreeViewItem> 

<div id="treeview"> 

         </div> 

<script type="text/javascript"> 
     jQuery(document).ready(function() { 
      $("#treeview").kendoTreeView({ 
       template: kendo.template($("#treeview-template").html()), 
       dataSource: new kendo.data.HierarchicalDataSource({ 
        data: @Html.Raw(Json.Encode(Model)), 
        schema: { 
         model: { 
          children: "Items" 
         } 
        } 
       }),    

      }); 
     }); 

Mit diesem erhalten Sie, was Sie wollen, Beachten Sie, dass das Verhalten, das Sie beschreiben, ein normales Verhalten für Ajax bin ding ist.

+0

BTW ich spreche über Baum-Liste und nicht Treeview –