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() }
}
könnten Sie den Treeview und den Datenquellcode posten? –