【问题标题】:Kendo Multiselect data.length undefined in templateKendo Multiselect data.length 在模板中未定义
【发布时间】:2017-07-24 18:46:51
【问题描述】:

这很简单,我有一个多选,当一个项目被选中时,我希望标签代表 DataTextField。选择多个项目时,我希望一个标记表示所选项目数量。这是我的代码:

@(Html.Kendo().MultiSelect()
      .Placeholder("Select Employees...")
      .Name("empSelect")
      .DataTextField("Employee")
      .DataValueField("PERSONNEL_KEY")
      .HtmlAttributes(new { style = "width:100%;font-size:10px;", id = "empSelect" })
      .AutoBind(false)
      .AutoClose(false)
      .Filter(FilterType.Contains)
      .TagTemplateId("tagTemplate")
      .DataSource(source => {
            source.Read(read =>
            {
                 read.Action("GetEmployees", "EmployeeTS");
            })
      .ServerFiltering(true);}))

这里是 tagTemplate 脚本:

<script id="tagTemplate" type="text/x-kendo-template">
# if (data.length < 2) { #
    <span>
        #= data.Employee #
    </span>
# } else { #
    <span>
        #= data.length # selected
    </span>
# } #

所有项目都从我的控制器返回就好了。当我选择一个项目时,标签显示“未定义选择”。显然“data.length”是未定义的,但我知道没有其他方法可以获取所选项目的数量。

我目前正在使用 Telerik Kendo MVC 的 2016.3.1118 版本。

【问题讨论】:

    标签: templates telerik kendo-multiselect


    【解决方案1】:

    “数据”没有长度属性。因此,总是“其他”工作并显示未定义。

    <script>
    function onChange(e) {
        var multi = $("#empSelect").data("kendoMultiSelect");
    
         var multi = $("#empSelect").data("kendoMultiSelect");
    
        if (multi.listView._dataItems.length > 1) {
    
            multi.setOptions({
                tagMode: 'single'
            });
        } else {
            multi.setOptions({
                tagMode: 'multiple'
            });
        }
    
        multi.refresh();
    }
    

    @(Html.Kendo().MultiSelect()
      .Placeholder("Select Employees...")
      .Name("empSelect")
      .DataTextField("TANIM")
      .DataValueField("URETIM_YERI")
      .AutoBind(false)
      .AutoClose(false)
      .Filter(FilterType.Contains)
      .TagMode(TagMode.Multiple)
      .Events(e =>
            {
                e.Change("onChange");
            })
      .DataSource(source =>
      {
          source.Read(read =>
          {
              read.Action("GetFactories", "Factory");
          })
    .ServerFiltering(true);
      }))
    

    【讨论】:

    • 感谢您的回复。那么如何获取所选项目的数量呢?
    • 如果您不想在第一次选择后仅显示项目文本,您可以添加“.TagMode(TagMode.Single)”并删除“.TagTemplateId("tagTemplate")”
    • 我知道,但选择1项时,标记码单个显示的“1项选择”。我希望它在选择 1 项时显示 DataTextField (在这种情况下为员工)。选择多个项目时,我希望它显示“{X} 个已选择项目”
    • 我需要做的就是将“data.length”替换为获取所选项目数量所需的任何内容,一切都应该正常工作。
    • 在 onChange 事件中,我添加了“multi.refresh()”以使其在取消选择项目时正确运行。但总的来说,做的工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多