2016-04-04 11 views
0

Ich habe eine Baumansicht auf einer Seite, die Daten von einer ComboBox und einem Multiselect erhält. Die ComboBox enthält den Namen jeder Zutat und die Multiselect enthält die möglichen Betragstypen, die dann als Namen für alle ihre Kindknoten verwendet werden.Kendo UI TreeView: Fügen Sie nur Knoten hinzu, die nicht in der Ansicht vorhanden sind

Der Baum sieht in etwa wie folgt aus:

  • Ingredient 1
    • 100mg
    • 200mg
  • Ingredient 2
    • 50mg
    • 100mg

Alles funktioniert gut, außer ich zweimal den gleichen Wert hinzufügen kann, weil ich nicht in der Lage bin zu prüfen ob ein Knoten bereits vorhanden ist.

Hier ist die Funktion, die ich neue Elemente hinzuzufügen bin mit:

var addElement = function() { 

    var treeview = $("#ingredientTree").data("kendoTreeView"); 
    var multiselect = $("#ingredientAmount").data("kendoMultiSelect"); 
    var ingredientToAdd= $("#ingredient").val(); 

    // I allways get an empty array at this point. 
    var exinstingIngredient= treeview.findByText(ingredientToAdd); 

    var children = new Array(); 
    var amount = multiselect.value(); 

    for (var j = 0; j < amount.length; j++) { 

     children.push({ text: amount[j] }); 
    } 

    // it allways adds the items because the length is allways 0 
    if (exinstingIngredient.length === 0) { 
     treeview.append({ 
      text: ingredientToAdd, 
      items: children 
     }); 
    } 
} 

Ich verstehe nicht, warum es nicht das vorhandene Element finden kann sogar ich für diesen Text seinen Namen als Text und sucht gesetzt.

edit:

Hier haben wir die Strukturansichts:

@(Html.Kendo().TreeView().TemplateId("treeview-template").Name("ingredientTree")) 

, dass die Quelle der Zutaten ist es Griffe einfach nur Strings:

@(Html.Kendo().ComboBox() 
    .Name("ingredient") 
    .DataSource(source => source.Read(r => r.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "InternationalIngredients" })))) 
    .Events(events => events.Change("onIngredientChanged")) 
) 

Sie die Quelle finden Nach für Beträge, die Strings behandelt:

@(Html.Kendo().MultiSelect() 
    .Name("ingredientAmount") 
    .DataSource(source => source.Read(read => read.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "InternationalIngredientAmount" })).Data("getIngredient")).ServerFiltering(true))) 

Dies ist eine Funktion des ausgewählten Bestandteil für den Service-Aufruf zu bestimmen:

function getIngredient() { 
    return { ingredient: $("#ingredient").val() } 
} 
+0

könnten Sie den Treeview und den Datenquellcode posten? –

Antwort

0

Ich habe festgestellt, den Grund für mein Problem jetzt. findByText scheint zu überprüfen, ob der Inhalt der Knoten die Klasse "k-in" umfasst. Leider wird dieser Inhalt geändert, wenn Sie eine Vorlage wie beschrieben hinzufügen here. Wenn Sie also ein Element mit Vorlage suchen möchten, sollten Sie findById verwenden oder Ihre Vorlage so definieren, dass Sie jQuery verwenden können.