Kendo ui 将treeview中的复选框与使用远程数据源的复选框绑定

Kendo ui 将treeview中的复选框与使用远程数据源的复选框绑定,kendo-ui,kendo-treeview,Kendo Ui,Kendo Treeview,让我来安排一个情况。在这种情况下,我需要在表单上显示几个复选框,这些复选框本质上是分层的,其中一些属于一个类别,另一些属于第二个类别,以此类推。我的第一个想法是使用带有复选框的KendoUI treeview。 关于这一点,我有几个问题: 显然,在表单加载中会出现一些复选框需要被选中的情况,因为它们来自数据源。当我定义新的kendo.data.hierarchycalDataSource时,有一个属性允许我指定数据源中定义层次结构的属性“ParentID”,另一个属性通知特定项是否有任何子项“h

让我来安排一个情况。在这种情况下,我需要在表单上显示几个复选框,这些复选框本质上是分层的,其中一些属于一个类别,另一些属于第二个类别,以此类推。我的第一个想法是使用带有复选框的KendoUI treeview。 关于这一点,我有几个问题:

  • 显然,在表单加载中会出现一些复选框需要被选中的情况,因为它们来自数据源。当我定义新的kendo.data.hierarchycalDataSource时,有一个属性允许我指定数据源中定义层次结构的属性“ParentID”,另一个属性通知特定项是否有任何子项“hasChildren”。我看不出是否有一个名为“checked”的属性或允许以相同方式与数据源进行适当绑定的属性是否存在,如何设置
  • 如果第一个问题的答案是否定的,那么到目前为止,我所做的是手动选中treeview的dataBound事件中的各个复选框,如下所示:
  • $(e.node).find(“:checkbox[isselected='true']).prop(“checked”,true);
    
    这样做的目的是检查节点中的复选框,并检查它们是否具有名为“isselected”(我使用复选框模板填充)的属性,如果该属性设置为
    true
    ,则选中该复选框。这是正常的,但当我想将复选框发回服务器时,问题就出现了。通过上述代码选择的复选框不会反映在treeview的数据源中。现在我得想办法了。我想知道是否有一个更优雅的解决方案,而不是我正在使用的方法:手动选中复选框->在每个复选框上触发事件,以更新其“isselected”属性或treeview数据源->在发布值时获取所有选中值


    感谢您的帮助。

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

    请看下面由KendoUI团队的Atanas提供的答案,他在其中解释了如何访问数据源项,并使用适当的属性标记其中的特定项。这对于在用户更改特定复选框的选项后手动更新数据源非常有用

    还可以查看以下内容,以了解如何正确构造复选框模板,从而使其能够正确回发


    有了这两个技巧,我就能够将复选框的ID发回控制器。视图端执行此操作的JavaScript代码总数现在约为80行,包括模型定义。虽然这还不算太多,但如果有人可以推荐一种更聪明的方法,这仍然太多。

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

    因此,在您的viewmodel中

    public class MenuItemViewModel
    {   
       public bool @checked { get; set; }
    }
    
    然后,当您从数据库填充viewmodel时,确保它返回正确的状态

    如果不想将选中项添加到viewmodel中

    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#视图模型