Kendo contextMenu функция выбора для определенных элементов
Я пытаюсь создать contextMenu, используя виджет kendoContextMenu. Это работает с использованием следующего кода.
$("#contextMenu").kendoContextMenu({
target: "#tree",
filter: ".k-item",
select: function(e) {
alert("Selected");
},
dataSource:
[
{ text: "Item1"},
{
text: "SubMenu1",
items: [
{ text: "Item1" }
]
},
{
text: "SubMenu2",
items: [
{ text: "Item1" }
]
}
]
});
Но я хочу указать функцию для каждого элемента, которая будет выполняться при нажатии на элемент. Я не хочу определять, что выполнять, основываясь на текстовом содержимом.
Я пытался добавить элемент клика в источник данных, но это не сработало.
2 ответа
Kendo ContextMenu не имеет этой функции, но у вас есть 2 варианта:
Сначала настройте контекстное меню, используя HTML с onclick
События:
<ul id="menu">
<li>
Option 1
<ul>
<li onclick="alert('test');">Sub option 1</li>
<li>Sub option 2</li>
</ul>
</li>
<li>Option 2</li>
</ul>
<script>
$(document).ready(function() {
$("#menu").kendoContextMenu({
orientation: orientation,
});
};
});
</script>
Во-вторых, если вы можете гарантировать уникальность имени, вы можете добавить свойства клика в dataSource
конфигурации, а затем в контекстном меню выберите событие, которое вы можете найти в dataSource
соответствующий пункт и выполнить прикрепленную функцию вручную.
Другой способ - добавить функцию выбора и переключить регистр, это случай, когда у вас есть древовидная структура:
$("#menu").kendoContextMenu({
select: function (e) {
var button = $(e.item);
var node = $(e.target);
var tmpKendDiagram = $(".diagram").data("kendoDiagram");
var tv = $(".tree-view").data("kendoTreeView");
var item = tv.dataItem(node);
var textSelect = $(e.item).children(".k-link").text();
switch (textSelect) {
case '1option':
//do stuff
break;
case '2option':
//do stuf
break;
default:
break;
}
}
});
Я знаю, что это устарело, но я реализовал это так
$("#context-menu").kendoContextMenu({
target: "#target",
select: function(e) {
let index = $(e.item).index();
e.sender.options.dataSource[index].click(e);
},
dataSource: [
{text: "Copy",
click: function(e) {
console.log("copied");
}
},
{text: "Delete",
click: function(e) {
console.log("deleted");
}
}
]
});
<link href="https://kendo.cdn.telerik.com/2020.1.406/styles/kendo.common.min.css" rel="stylesheet" />
<link href="https://kendo.cdn.telerik.com/2020.1.406/styles/kendo.default.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2020.1.406/js/kendo.all.min.js"></script>
<div id="target">Target</div>
<div id="context-menu"></div>