ASP.net/jQuery:JSTree,选择节点,似乎无法获得ID

问题描述:

目前,我使用AJAX处理程序来填充JSTree:ASP.net/jQuery:JSTree,选择节点,似乎无法获得ID

$(function() { 
     $("#jstree").jstree({ 
      "json_data": { 
       "ajax": { 
        "url": "AJAXHandler.aspx?action=GetMenu" 
       } 
      }, 
      "plugins": ["themes", "json_data", "dnd"] 
     }) 
     .bind("move_node.jstree", function (node, ref, position, is_copy, is_prepared, skip_check) { 
      console.log(node); }); 

    }); 

处理程序实际上使数据库调用,通过菜单项循环,创建一个JSON对象序列化,发回,并呈现:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Select Case Request("action") 
      Case "GetMenu" 
       GetMasterMenu() 
      Case "UpdateMenuHiearchy" 
       UpdateMenuHiearchy() 
     End Select 
    End Sub 

    Private Sub GetMasterMenu() 
     Dim dt As DataTable = GetMenu() 
     Dim nodesList As New List(Of JsTreeNode)() 
     PopulateNodes(dt, nodesList) 
     Dim ser As New JavaScriptSerializer() 
     Dim res As String = ser.Serialize(nodesList) 
     Response.ContentType = "application/json" 
     Response.Write(res) 
     Response.[End]() 
    End Sub 

    Private Sub PopulateNodes(ByRef dt As DataTable, ByVal nodes As List(Of JsTreeNode)) 

     Dim parents() As DataRow = dt.Select("PARENT_MENU_ID = 0") 

     'Root Nodes 
     For Each dr As DataRow In parents 
      Dim node As New JsTreeNode() 
      node.attributes = New Attributes() 
      node.attributes.id = dr("APPLICATION_MENU_ID").ToString 
      node.attributes.rel = "root" & dr("APPLICATION_MENU_ID").ToString 
      node.data = New Data() 
      node.data.title = dr("DESCRIPTION") 
      node.state = "open" 

      'Check for Children 
      Dim strSQL As New StringBuilder 
      With strSQL 
       .Append(" SELECT * FROM APPLICATION_MENU WHERE PARENT_MENU_ID = " & dr("APPLICATION_MENU_ID") & "") 
      End With 

      Dim dtChildren As DataTable = DatabaseManager.Query(strSQL.ToString) 
      If dtChildren.Rows.Count > 0 And dtChildren IsNot Nothing Then 
       For Each drChild As DataRow In dtChildren.Rows 
        AddChildNodes(dt, dr("APPLICATION_MENU_ID"), node) 
       Next 
      End If 
      node.attributes.mdata = "{draggable : true}" 
      nodes.Add(node) 
     Next 
    End Sub 

    Private Sub AddChildNodes(ByRef dt As DataTable, ByVal parentID As Integer, ByVal node As JsTreeNode) 
     Dim strSQL As New StringBuilder 
     With strSQL 
      .Append(" SELECT * FROM APPLICATION_MENU WHERE PARENT_MENU_ID = " & parentID.ToString & "") 
     End With 
     Dim dtChildren As DataTable = DatabaseManager.Query(strSQL.ToString) 
     node.children = New List(Of JsTreeNode)() 

     For Each drChild As DataRow In dtChildren.Rows 
      Dim cnode As New JsTreeNode() 
      cnode.attributes = New Attributes() 
      cnode.attributes.id = drChild("APPLICATION_MENU_ID").ToString 
      node.attributes.rel = "folder" 
      cnode.data = New Data() 
      cnode.data.title = drChild("DESCRIPTION") 
      cnode.attributes.mdata = "{draggable : true }" 

      strSQL = New StringBuilder 
      With strSQL 
       .Append(" SELECT * FROM APPLICATION_MENU WHERE PARENT_MENU_ID = " & drChild("APPLICATION_MENU_ID") & "") 
      End With 

      Dim dtChildren2 As DataTable = DatabaseManager.Query(strSQL.ToString) 
      If dtChildren.Rows.Count > 0 And dtChildren IsNot Nothing Then 
       AddChildNodes(dt, drChild("APPLICATION_MENU_ID"), cnode) 
      End If 
      node.children.Add(cnode) 
     Next 
    End Sub 

这里的想法是将move_node绑定到会打击处理程序和更新数据库,以其中一个功能我移动了这个对象。我已经能够创建绑定来做到这一点。但问题是,我似乎无法获得身份证。我将它设置在JSON对象的总体属性中,但是当我通过console.log监视NODE和REF对象时,id字段为空。

什么给?有任何想法吗?我错过了一些重要的东西?

再次与它摆弄之后,我找到了答案:

cnode.attributes 
node.attributes 

必须下具体的名字,这些都必须cnode.attr和node.attr工作。

你确实是正确─

JSTree V1 +使用jQuery的绑定等。因此,你需要使用attr获取的对象属性 - 也在一个侧面说明,IE7-的情况下,与敏感节点数据,例如:

$("#node").attr("id")!=$("#node").attr("ID")