我目前在 Kendo UIMultiSelect
小部件上遇到了一个问题,因为我不止一次选择了一个选项。例如,在下图中,我想在选择The Dark Knight后再次选择Schindler's List,但不幸的是,小部件的行为更像是一个集合而不是有序列表,即不允许重复选择。实际上是否有适当的方法来实现这一目标?任何解决方法?MultiSelect
问问题
2313 次
1 回答
5
这是多选控件的预期行为,没有简单的方法可以使用可用的配置选项让它做你想做的事。可能的解决方法是...
创建自定义多选小部件
像这样的东西应该可以工作(注意我没有测试这么多 - 它可以让你添加倍数并保持过滤器完好无损):
(function ($) {
var ui = kendo.ui,
MultiSelect = ui.MultiSelect;
var originalRender = MultiSelect.fn._render;
var originalSelected = MultiSelect.fn._selected;
var CustomMultiSelect = MultiSelect.extend({
init: function (element, options) {
var that = this;
MultiSelect.fn.init.call(that, element, options);
},
options: {
name: 'CustomMultiSelect'
},
_select: function (li) {
var that = this,
values = that._values,
dataItem,
idx;
if (!that._allowSelection()) {
return;
}
if (!isNaN(li)) {
idx = li;
} else {
idx = li.data("idx");
}
that.element[0].children[idx].selected = true;
dataItem = that.dataSource.view()[idx];
that.tagList.append(that.tagTemplate(dataItem));
that._dataItems.push(dataItem);
values.push(that._dataValue(dataItem));
that.currentTag(null);
that._placeholder();
if (that._state === "filter") {
that._state = "accept";
}
console.log(this.dataSource.view());
},
_render: function (data) {
// swapping out this._selected keeps filtering functional
this._selected = dummy;
return originalRender.call(this, data);
this._selected = originalSelected;
}
});
function dummy() { return null; }
ui.plugin(CustomMultiSelect);
})(jQuery);
演示在这里。
使用下拉列表
使用简单的下拉列表(或组合框)并将选择事件绑定到附加到您的列表(您必须手动创建)。
例如:
var mySelectedList = [];
$("#dropdownlist").kendoDropDownList({
select: function (e) {
var item = e.item;
var text = item.text();
// store your selected item in the list
mySelectedList.push({
text: text
});
// update the displayed list
$("#myOrderedList").append("<li>" + text + "</li>");
}
});
然后您可以绑定对这些列表元素的点击以从列表中删除元素。这样做的缺点是它需要更多的工作才能让它看起来“漂亮”(你必须创建和组合你自己的 HTML、css、图像等)。
于 2013-12-11T00:27:53.077 回答