2013-10-31 23 views
1

我正在使用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个标签......它开始重复每个项目。所以,如果我选择“武器”,然后“削去”,我得到...

武器 削去 武器

这将继续无限量的,每一个我添加了一个新的标签的时间。

回答

0

我不知道如果这是你的问题,但在一般像你这样在这里剑道并不真正喜欢做的source MVVM非小部件结合:

<div data-template="templates-admin-prototype-tags-preview" data-bind="source: Tags"></div> 

尝试使其成为一个ListView通过添加小工具data-role="listview"

<div data-role="listview" 
    data-template="templates-admin-prototype-tags-preview" 
    data-bind="source: Tags"></div>