Изменить имя узла Kendo TreeView с помощью Javascript - я не вижу, как это сделать
Я хочу изменить имя родительского узла, который я выбираю
Я знаю, как добавить новый родительский узел с добавлением JavaScript
var selectedNode = treeview.select(); treeview.append({ ReportGroupName: $("#addNodeText").val()
Я знаю, как отобразить выбранный узел в текстовом поле
$("#groupNameSelected").val(nodeName);
- который называется с
select: onSelect,
Тем не менее, я хочу изменить текст узла
Я гуглил и смотрел на API, я хочу чистый javascript или jquery способ просто обновить древовидное представление
Я настраивал код так
var treeview = $("#treeview").data("kendoTreeView");
var selected = treeview.select(), item = treeview.dataItem(selected);
if (item) {
console.log('Selected item: ' + item.ReportGroupName + ' : ' + item.Id + ' (uid: ' + item.uid + ')');
}
Но как мне просто изменить текст выбранного узла в виде дерева?
Обновить:
Я нашел этот код на форуме Telerik.
Это действительно меняет текст, но ПОСЛЕ того, как я пытаюсь записать данные в виде дерева
console.log(mydatasource.data()); // i expect this to change as adding nodes does update this ...
function refreshTreeNode(data)
{
var currentText = $("#treeview").data("kendoTreeView").select().find('span.k-in').first().text();
var node = $("#treeview").data("kendoTreeView").select().find('span.k-in').first();
var nodeSpan = $("#treeview").data("kendoTreeView").select().find('span.k-in > span.k-sprite').first();
node.text('');
node.append(nodeSpan);
node.append(data);
}
Изменения в данных не происходят в данных древовидной структуры, только в пользовательском интерфейсе, который я вижу, это изменение. Зачем?
1 ответ
Причина, по которой он только изменяет пользовательский интерфейс, заключается в том, что данные, хранящиеся в источнике данных, не изменяются.
Вместо этого лучшее решение зависит от того, что вы знаете о данных, а именно:
- Источник данных (вам нужно иметь доступ к источнику данных, чтобы использовать datasource.get() и set())
- Идентификатор записи (вы можете использовать datasource.get(id) для получения данных из источника данных, если вы знаете идентификатор)
- Uid записи (если вы этого не сделаете, вы можете использовать свойство uid, чтобы увидеть их, попробуйте inspect element)
Инструкция для примера ниже:
- Развернуть все узлы
- Выберите любой узел
- Введите имя для замены на
- Нажмите кнопку "Изменить имя"
- Чтобы увидеть обновление в источнике данных Нажмите кнопку "Проверить источник данных" и откройте консоль, после чего вы сможете найти ее там.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Kendo UI Snippet</title>
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.1.226/styles/kendo.common.min.css" />
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.1.226/styles/kendo.rtl.min.css" />
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.1.226/styles/kendo.silver.min.css" />
<link rel="stylesheet" href="http://kendo.cdn.telerik.com/2016.1.226/styles/kendo.mobile.all.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://kendo.cdn.telerik.com/2016.1.226/js/kendo.all.min.js"></script>
</head>
<body>
<div id="treeview"></div>
<input type="text" id="changeNameTo"></input>
<button id="changeNameNow">Change Name</button>
<button id="checkDataSource">Check Datasource Data on console</button>
<script>
var dataSource = new kendo.data.HierarchicalDataSource({
transport: {
read: {
url: "http://demos.telerik.com/kendo-ui/service/Employees",
dataType: "jsonp"
}
},
schema: {
model: {
id: "EmployeeId",
hasChildren: "HasEmployees"
}
}
});
$("#treeview").kendoTreeView({
dataSource: dataSource,
dataTextField: "FullName"
});
$("#changeNameNow").on("click", function() {
//get the data from datasource using id (if you know the id)
//dataSource.get(2).set("FullName",$("#changeNameTo").val());
//if you don't, try utilize data-uid
dataSource.getByUid($(".k-state-selected").parent().parent().attr("data-uid")).set("FullName", $("#changeNameTo").val());
});
$("#checkDataSource").on("click", function() {
console.log(dataSource.data());
});
</script>
</body>
</html>