4

让我在这里布置一个情况。我有一种情况,我需要在表单上显示几个复选框,这些复选框本质上是分层的,其中一些属于一个类别,而另一些属于第二个类别,依此类推。我的第一个想法是使用带有复选框的 KendoUI 树视图。我对此有几个问题:

  1. 显然会有一种情况,在表单加载时需要检查一些复选框,因为它们来自数据源。当我定义新的 kendo.data.HierarchicalDataSource 时,有一个属性可以让我指定数据源中的哪些属性定义了层次结构,“ParentID”,另一个通知特定项目是否有任何子项目“hasChildren”。我看不到是否有一个名为“checked”的属性或允许以相同方式与数据源正确绑定的属性。是否存在,我该如何设置
  2. 如果第一个问题的答案是否定的,那么到目前为止我所做的是手动检查 treeview 的 dataBound 事件中的各个复选框,如下所示:
    $(e.node).find(":checkbox[isselected='true']").prop("checked", true);

这样做是通过节点中的复选框并检查它们是否具有名为“isselected”的属性(我使用复选框模板填充),如果该属性设置为true然后选中该复选框。这可以正常工作,但是当我想将复选框发布回服务器时会出现问题。通过上述代码选中的复选框不会反映在树视图的数据源中。现在我必须弄清楚如何做到这一点。如果有一个更优雅的解决方案而不是我正在使用的方法,我正在徘徊:手动选中复选框 - >在每个复选框上触发事件以更新其“isselected”属性或树视图数据源 - >发布值获取全部的检查值。

谢谢你的帮助。

4

2 回答 2

4

在等待有人为此提供智能解决方案的同时,让我添加我发现的内容以使其正常工作,以便我可以帮助遇到相同问题的人。

请查看以下KendoUI 论坛帖子和来自 KendoUI 团队的 Atanas 的回答,其中他解释了如何访问数据源项并使用适当的属性标记其中的特定项。这对于在用户更改特定复选框的选择后手动更新数据源很有用。

另请查看以下KendoUI 论坛帖子,了解如何正确构建复选框模板以便正确回传。

通过这两个技巧,我能够将选中的复选框的 ID 发送回控制器。视图端执行此操作的全部 JavaScript 代码现在大约 80 行代码,包括模型定义。虽然这并不过分,但如果有人可以推荐一种更聪明的方式,那仍然是太多了。

于 2013-10-18T12:41:52.930 回答
1

嗨,默认情况下,treeview 使用一个名为checked 的属性。

所以在你的视图模型中

public class MenuItemViewModel
{   
   public bool @checked { get; set; }
}

然后,当您从数据库中填充视图模型时,请确保它返回正确的状态。

在此处输入图像描述

如果您不喜欢将检查添加到您的视图模型

然后你可以将它映射到数据源上

   dataSource: new kendo.data.HierarchicalDataSource({
          data: kendo.observableHierarchy([]),,
          schema: {
            model: {
              fields: {
                checked: {from: "WHATEVERYOUWANT", type: "boolean"}
              }
            }
          }
        }),
        dataTextField: "Name",
        checkboxes: true

C# 视图模型

  public class MenuItemViewModel
    {   
       public bool WHATEVERYOUWANT { get; set; }
    }
于 2016-04-05T17:52:41.573 回答