gpt4 book ai didi

javascript - 动态更改 Kendo MultiSelect 的 DataTextField

转载 作者:行者123 更新时间:2023-11-28 00:21:29 26 4
gpt4 key购买 nike

我有一个 Kendo 组合框,有两个值:Main、Secondary。我还有一个链接到数据源的 Kendo mutliselect。默认情况下,组合框显示“Main”,多选显示“Parent1”、“Parent2”,即数据源的“名称”字段。

如果用户从组合框中选择“Secondary”,我想动态地将多选的 dataTextField 更改为 Name2,类似地,当用户从组合框中选择“Main”时,多选应链接到“Name”作为其 dataTextField下拉。

这是Fiddle

HTML

<select id="CategoryOption" style="width: 100px;">
<option>Main</option>
<option>Secondary</option>
</select> <br><br><br><br><br><br>
<select id="MainCategory" style="width: 90%;"></select>

Java 脚本

createCategoryOption("#CategoryOption");
createMainCategory("#MainCategory", "Name", "ID");
function createCategoryOption(divID1)
{
$(divID1).kendoComboBox({
change: function (e) {
SetSelectServicesText();
}
});
}
function createMainCategory(usersDiv, textField, valueField) {
$("#MainCategory").kendoMultiSelect({
dataSource: [
{ Name: "Parent1", Id: 1, Name2: "Child1" },
{ Name: "Parent2", Id: 2, Name2: "Child2" }
],
dataTextField: textField,
dataValueField: valueField
});
}
function SetSelectServicesText()
{
if($("#CategoryOption").data("kendoComboBox").value() == "Main")
{
$("#MainCategory").destroy();
createMainCategory("#MainCategory", "Name", "ID");
}
else
{
$("#MainCategory").destroy();
createMainCategory("#MainCategory", "Name2", "ID");
}
}

外部来源

<link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.408/styles/kendo.common.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.408/styles/kendo.rtl.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.408/styles/kendo.default.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.408/styles/kendo.dataviz.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.408/styles/kendo.dataviz.default.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2015.1.408/styles/kendo.mobile.all.min.css">

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://cdn.kendostatic.com/2015.1.408/js/kendo.all.min.js"></script>

最佳答案

Kendo 小部件通常会在目标元素周围创建一个包装结构,该结构不会被方法destroy()破坏(我使用的是认为这是一件坏事)。

所以销毁(或从 DOM 中删除)一个小部件并不是那么简单。检查一下:

function createMainCategory(usersDiv, textField, valueField, remove) 
{
var mc = $("#MainCategory");

if (remove)
{
// Destroys the widget
mc.data("kendoMultiSelect").destroy();

// Get the widget wrapper element structure
var p = mc.closest(".k-widget");

// Detache the #MainCategory from the wrapper structure
mc = mc.empty().detach();

// Remove the wrapper structure
p.remove();

// Append the #MainCategory to the body again
$('body').append(mc);
}

$("#MainCategory").kendoMultiSelect({
dataSource: [
{ Name: "Parent1", Id: 1, Name2: "Child1" },
{ Name: "Parent2", Id: 2, Name2: "Child2" }
],
dataTextField: textField,
dataValueField: valueField
});
}

如您所见,在删除中阻止它...

  • 使用内置方法 destroy() 销毁小部件;
  • 然后它选择包含所有结构的主包装元素;
  • 在删除之前,它会选择 detaches #MainCategory 包装器外部(detach() 删除但返回其引用以进一步操作元素);
  • 因此,有了 #MainCategory 安全,它 removes来自 DOM 的整个结构的包装器;
  • 最后再次在主体上添加了 #MainCategory 以用于托管新的小部件。

Fiddle .

关于javascript - 动态更改 Kendo MultiSelect 的 DataTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com