我正在使用Kendo MultiSelect作为“标签云”类型的东西。标签看起来像这样...他们是简单的JSON。Kendo Multiselect:奇怪的“缓存”,并重复选定项目
{
Id: "tags/weapon",
Name: "Weapon",
Description: "This item qualifies as a weapon in the game."
},
{
Id: "tags/sword",
Name: "Sword",
Description: "This item qualifies as a sword in the game."
},
{
Id: "tags/shield",
Name: "Shield",
Description: "This item qualifies as a shield in the game."
}
视图模型看起来很像这个...
var viewModel = kendo.observable({
Id: null,
Name: null,
Consumable: false,
Equipable: false,
Tags: [],
});
创建多选看起来像这样的JavaScript ...
var $tags = $("#tags").kendoMultiSelect({
dataTextField: "Name",
dataValueField: "Id",
itemTemplate: $('#editing-tags-template').html(),
dataSource: {
transport: {
read: {
dataType: "json",
url: url
}
}
},
open: function (e) {
this.list.addClass("k-tag-cloud");
},
close: function (e) {
}
}).data("kendoMultiSelect");
其中k标签-cloud是一种自定义CSS样式,这不会给我带来任何麻烦。
,这适用于的HTML是这样的...
<select id="tags" multiple="multiple"
data-placeholder="Select Tags..."
class="dark k-tag-cloud"
data-bind="value: Tags"
style="width: 500px;"></select>
所有这些工作完全如我所料。在我的屏幕上看起来像这样,行为是正常的,等等。我可以选择多个标签,当我保存该项目时,他们可以保存而不需要任何额外的代码 - 只需绑定到视图模型即可。如果我检索一个项目,标签列表将被正确重新填充选定的标签。
然而,有正在被用于绘制在页面的不同部分列表屏幕模板,看起来像这样..
<h2>Preview</h2>
<div style="border: dashed 2px black;">
<div style="padding: 8px;">
<h3 data-bind="text: Name" style="margin: auto;"></h3>
<h5 data-bind="visible: Equipable" style="margin: auto;">Equipable</h5>
<h5 data-bind="visible: Consumable" style="margin: auto;">Consumable</h5>
<div data-template="templates-admin-prototype-tags-preview" data-bind="source: Tags"></div>
</div>
</div>
然后这是实际的模板,我呼叫。
<script type="text/x-kendo-template" id="templates-admin-prototype-tags-preview">
<div class="k-prototype-tag">${ Name }</div>
</script>
现在发生的事情是,一旦标签被添加,它吸引到这部分,但随后在那里停留 - 它不会“走开”如果我删除标记。所以..
如果我开始时,选择“支招”,平局看起来是这样的..
武器
如果我删除的“武器”,它会删除它的罚款。但是如果我超过1个标签......它开始重复每个项目。所以,如果我选择“武器”,然后“削去”,我得到...
武器 削去 武器
这将继续无限量的,每一个我添加了一个新的标签的时间。