我想从Telerik's Kendo UI销毁并重新创建多选小部件。通常情况下,我之前做了很多次很容易,但从来没有多选。我现在面临的问题是应该起作用的方式(至少我认为应该这样)......不是。
以下是我用来销毁和重新创建网格或下拉列表等组件的代码:
if ($('#dropdown1').data('kendoDropDownList')) {
$('#dropdown1').data('kendoDropDownList').destroy();
$('#dropdown1').html('');
}
我怎么说 - 如果我在下拉列表或网格上使用它 - 它可以工作。但是在多选中却没有:
if ($('#multiselect1').data('kendoMultiSelect')) {
$('#multiselect1').data('kendoMultiSelect').destroy();
$('#multiselect1').html('');
}
我准备了小Dojo example,其中显示了行为。当下拉列表被销毁并重新创建时,它看起来是正确的。当我对Multiselect做同样的事情时,它总是将widget添加为下一行。
当然我可以通过更改dataSource来解决这个问题,只是调用read方法或类似的东西,但我想知道它是否是bug或者还有另一种方法来销毁多重选择。
感谢。
答案 0 :(得分:6)
此代码使用unwrap()从kendo包装器div中删除原始输入,然后使用.remove()删除剩余的kendo DOM元素:
$('html').on('click', '#destroy2', function(e){
if ($('#multiselect1').data('kendoMultiSelect')) {
alert('multiselect exists - destroying and recreating');
$('#multiselect1').data('kendoMultiSelect').destroy();
$('#multiselect1').unwrap('.k-multiselect').show().empty();
$(".k-multiselect-wrap").remove();
$("#multiselect1").kendoMultiSelect({
dataSource: {
data: ["Three3", "Four4"]
}
});
$('#text2').text('Multiselect AFTER calling destroy');
}
});
答案 1 :(得分:1)
当您清除multiselect1的html时,它仍会留下将输入转换为窗口小部件时创建的所有其他dom元素。 然后当你重新创建它时,它并没有完全处理它以及下拉列表,我认为这可能是一个错误。
如果您改为包装需要在div元素中重新创建的控件并清除该元素,它将摆脱所有额外元素,以便您可以启动一个干净的平板来创建新的。
http://dojo.telerik.com/@Stephen/EDaYA
<div id='multiselectDiv'>
<input id="multiselect1" />
</div>
$('html').on('click', '#destroy2', function(e){
if ($('#multiselect1').data('kendoMultiSelect')) {
alert('multiselect exists - destroying and recreating');
$('#multiselect1').data('kendoMultiSelect').destroy();
$('#multiselectDiv').empty();
$('#multiselectDiv').append('<input id="multiselect1" />')
$("#multiselect1").kendoMultiSelect({
dataSource: {
data: ["Three3", "Four4"]
}
});
答案 2 :(得分:0)
我将您的代码更新为此内容并且有效:
$('html').on('click', '#destroy2', function(e){
if ($('#multiselect1').data('kendoMultiSelect')) {
alert('multiselect exists - destroying and recreating');
var multiSelect = $('#multiselect1').data("kendoMultiSelect");
multiSelect.value([]);
$("#multiselect1").remove();
$("#multiselect1").kendoMultiSelect({
dataSource: {
data: ["Three3", "Four4"]
}
});
$('#text2').text('Multiselect AFTER calling destroy');
}
});