如何在加载时加载 jstree 复选框 VB ASP

How to load jstree checkbox on load VB ASP

我正在尝试使用 ASP 在加载时加载 jstree 复选框。后面的代码获取一个树节点并填充一个列表项供 jstree 使用。在这个过程中,有节点标识为"Checked",其中我在列表项中添加了class属性jstree-clicked。但是,当页面加载时,它没有任何效果。请让我知道用预先选中的复选框填充这些复选框的适当方法。我的后端有以下内容

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim tNode As TreeNode
    Dim treeView As New TreeView
    Dim tNodeCollection As New TreeNodeCollection
    tNodeCollection = treeView.Nodes

    ' Code to generate and store within
    ' a System.Web.UI.WebControls.TreeView object
    ' ...
    ' ...
    ' ...

    repeater.DataSource = tNodeCollection 
    repeater.DataBind()
End Sub

Protected Sub repeater_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)
    Dim tNode As TreeNode
    Dim li As New HtmlGenericControl
    Dim ul As New HtmlGenericControl("ul")
    tNode = e.Item.DataItem

    If (tNode Is Nothing) Then
        Return
    End If

    li = e.Item.FindControl("listItem")
    li.ID = tNode.Value
    li.InnerHtml = tNode.Text
    If tNode.Checked Then
        li.Attributes.Add("rel", "true")
    End If

    If tNode.ChildNodes.Count > 0 Then
        li.Controls.Add(ul)
        searchChildNodes(tNode.ChildNodes, ul)
    End If
End Sub

Private Sub searchChildNodes(childNodes As TreeNodeCollection, ul As HtmlGenericControl)
    Dim tNode As TreeNode
    For Each tNode In childNodes
        Dim li As New HtmlGenericControl("li")
        li.ID = tNode.Value
        li.InnerHtml = tNode.Text
        ul.Controls.Add(li)
        If tNode.ChildNodes.Count > 0 Then
            Dim unorderedList As New HtmlGenericControl("ul")
            li.Controls.Add(unorderedList)
            searchChildNodes(tNode.ChildNodes, unorderedList)
        End If
    Next
End Sub

下面是代码的 aspx 部分。

<div id="myTreeNode" > 
    <asp:Repeater ID="rptr" runat="server" EnableViewState="False" OnItemDataBound="repeater_ItemDataBound" >
    <headerTemplate>
        <ul>
    </headerTemplate>
    <ItemTemplate>
        <li id="listItem" runat="server"></li>
    </ItemTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
    </asp:Repeater>
</div>

你应该添加 jstree-clicked class 的不是 li 元素(我在这一行中看到它: li.Attributes.Add("class", "jstree-clicked") )而是 a li.

中的元素

确保为 li 的直接 a 子级设置 class。

在 javascript 文件中,jsTree 然后检查属性并在加载所有内容后预选复选框。这将适当地选中复选框。正如上面评论中提到的,这避免了只处理 CSS 而是处理整个节点。

$("#myTreeNode").bind('ready.jstree', function (event, data) {
    var $tree = $(this);
    $($tree.jstree().get_json($tree, {
        flat: true
    })).each(function () {
    var checked = $(this).attr('rel');
    var node;
    if( checked == "true"){
        node = $("#myTreeNode").jstree().select_node(this.id);
    }
});
});