2015-05-26 5 views
0

Я пытался создать простой клиент LDAP, чтобы просто извлекать данные с сервера LDAP. Я возвращаю массив объектов JSON из JSP. При щелчке любого значения я получу некоторые данные с онлайн-сервера. Я могу загрузить первый набор массивов в дерево. Массивы, полученные на следующем этапе, не привязаны к JSTree. Мои коды:Невозможно динамически загружать Json-массивы из JSP в Jstree

function getGroupsStructure(id) { 
console.log("in getGroupsStructure-->"); 
var paramId = ""; 

if(id == '') { 
    console.log("in if-->"); 
    paramId = "c=de"; 
} else { 
    console.log("in else-->"); 
    paramId = id; 

} 

    var params = { 
    "DN" : paramId, 

}; 
    console.log("params-->",params); 
    var getGroupsStructureForUserService = service(webURL + "sendingValues/getGroupsStructureForUser",params,"POST"); 
    getGroupsStructureForUserService.success(function(data) { 
     console.log("in success-->dta-->",data); 
     if(data.errorCode == '0') { 
      console.log("in error code 0-->dta-->",data.treeData); 
      $('.treeNode').jstree({ 
       'core': { 
        'data': function (obj, cb) { 
         cb.call(this, 
           data.treeData); 
       } 
       } 
      }); 
      console.log("Tree Created..."); 
     } else { 
      console.log("error code not 0--data-->",data); 
     } 

     $(document).off('click').on('click', '.treeNode a', function() { 
      console.log("on click of a-->"); 
      var id = $(this).parent().attr('id'); 

      console.log("id-->",id); 

      getGroupsStructure(id); 
      console.log("after getGroupsStructure"); 
     }); 
    }); 
    getGroupsStructureForUserService.error(function(data) { 
     console.log(" empty error"); 
    // console.log(err); 
    }); 
} 

СПЯ кодекса является

def NextLevelLDAP(String DN) { 
     // println "Next Level===>" 
      assert ldap!=null 
      def responseArray=[] 
      def results=ldap.search('objectClass=*',DN,SearchScope.ONE)   //Will be triggered when + is pressed in GUI to get next level of tree 
     // assert results==null 
      if(DN.startsWith("c=")) 
       { 
        JSONObject responseJson1=new JSONObject() 
        responseJson1.put("id", initialDN) 
        responseJson1.put("parent", "#") 
        responseJson1.put("text","Parent") 
        responseArray.add(responseJson1) 
        for(entry in results) { 
        // println entry 
        // println "In NextLevel Using InitialDN" 
         JSONObject responseJson=new JSONObject() 
         responseJson.put("id", entry.dn) 
         responseJson.put("parent", DN) 
         String tempResDN=entry.dn.toString() 
         def tempLength=tempResDN.length() - DN.length() 
     //    println tempResDN 
         String tempName=tempResDN.substring(2,tempLength-1) 
    //     println tempName 
         responseJson.put("text",tempName) 
         responseArray.add(responseJson) 
     //    println entry 
         println responseJson.toString() 
        } 
        return responseArray 
       } 
      if(results.size!=0) 
      { 
       for(entry in results) { 
        println entry 

        JSONObject responseJson=new JSONObject() 
        responseJson.put("id", entry.dn) 
        responseJson.put("parent", DN) 
        String tempResDN=entry.dn.toString() 
        def tempLength=tempResDN.length() - DN.length() 
    //    println tempResDN 
        String tempName=tempResDN.substring(2,tempLength-1) 
        println tempName 
        responseJson.put("text",tempName) 
        responseArray.add(responseJson) 
    //    println entry 

       } 
       return responseArray 
      } 
      } 

Пожалуйста Игнорируйте способ получить идентификатор родительского. Его что-то COmplicated. Пожалуйста, помогите мне, как получить динамические узлы дерева. Я просто получаю кулачный уровень дерева. Данные на клике для других уровней отображаются в консоли, но не привязаны к дереву.

спасибо.

ответ

0

У вас есть это наоборот - вам нужно создать дерево и это сделать запрос для вас, так что вместо этого:

'data': function (obj, cb) { 
    cb.call(this, data.treeData); 
} 

использовать что-то вроде этого:

'data': function (obj, cb) { 
    // you probably need to pass the obj.id as a parameter to the service 
    // keep in mind if obj.id is "#" you need to return the root nodes 
    service(...).success(function (data) { 
     cb.call(this, data.treeData); 
    }); 
} 

Таким образом, вам не нужно каждый раз отсоединять и повторно подключать обработчики кликов, и он будет работать из коробки для открытия узлов. Если вы хотите, чтобы открыть узел на мыши, вы можете использовать это:

$('#tree').on('select_node.jstree', function (e, data) { 
    data.instance.open_node(data.node); 
}); 

Так весь ваш код должен выглядеть следующим образом:

function load(id) { 
    var params = { 
     "DN" : id && id !== '#' ? id : "c=de" 
    }; 
    return service(webURL + "sendingValues/getGroupsStructureForUser", params, "POST"); 
} 

$('#tree') 
    .jstree({ 
     'core' : { 
      'data': function (obj, cb) { 
       load(obj.id).success(function (data) { 
        cb.(data.treeData); 
       }); 
      } 
     } 
    }) 
    .on('select_node.jstree', function (e, data) { 
     data.instance.open_node(data.node); 
    }); 

Просто убедитесь, что вы маркировать Узлы вашего возвращение, как имеющие дети (установите их children собственности на boolean true).

+0

Получил код, работающий. Большое спасибо. –

+0

Если узел дерева при расширении не имеет каких-либо детей, тогда он не должен заканчиваться сам по себе? Фактически это дает ошибку. Есть ли способ, когда пустой Json отправляется обратно в дерево, узел автоматически завершается? то есть группа не имеет подэлемента. –