У меня есть древовидная структура на странице, которая получает данные из ComboBox и мультиселектора. ComboBox содержит имя каждого ингредиента, а multiselect содержит возможные типы сумм, которые затем используются как имена для всех их дочерних узлов.Kendo UI TreeView: добавьте только узлы, не находящиеся в представлении
Дерево выглядит так:
- Ингредиент 1
- 100мг
- 200мг
- Ингредиент 2
- 50мг
- 100мг
Все работает отлично, за исключением того, что я могу добавить такое же значение в два раза, потому что я не могу проверить, если узел уже существует.
Вот функция, я использую, чтобы добавить новые элементы:
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
});
}
}
Я не понимаю, почему он не может найти существующий элемент даже я установить его имя в виде текста и поиск этого текста.
редактировать:
Здесь мы имеем TreeView:
@(Html.Kendo().TreeView().TemplateId("treeview-template").Name("ingredientTree"))
Это является источником ингредиентов, он обрабатывает только простые строки:
@(Html.Kendo().ComboBox()
.Name("ingredient")
.DataSource(source => source.Read(r => r.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "InternationalIngredients" }))))
.Events(events => events.Change("onIngredientChanged"))
)
После вы найдете источник количество, которое обрабатывает строки:
@(Html.Kendo().MultiSelect()
.Name("ingredientAmount")
.DataSource(source => source.Read(read => read.Url(Url.HttpRouteUrl("DefaultApi", new { controller = "InternationalIngredientAmount" })).Data("getIngredient")).ServerFiltering(true)))
Это функция для определения выбранного ингредиента для вызова службы:
function getIngredient() {
return { ingredient: $("#ingredient").val() }
}
Вы могли бы разместить код древа и источника данных? –