如何在点击时刷新`ajax`节点?

时间:2011-08-04 00:10:04

标签: jstree

在我的jsTree中有一些从AJAX 获取数据的节点。

如何刷新数据而不是重新加载整个树?

  • 在我想要刷新的节点上,最好的是点击
  • 上下文菜单也可以

1 个答案:

答案 0 :(得分:3)

这个怎么样?

<html>
<head>
<script language="javascript" type="text/javascript" src="jquery.min.js"></script> 
<script language="javascript" type="text/javascript" src="jquery.jstree.js"></script>
<script>
var treeConfig = { 
  "json_data" : {   
  "data" : [{
      "data" : "Root",
      "state" : "closed",
      "children" : ""
      }],
  "ajax" : {
      "url" : "http://localhost/tree.json",
      "data" : function (node) {                        
          return { query : "Value" };
      }
    } 
  },
  "plugins" : [ "themes", "json_data", "ui" ],
};

$(document).ready(function(){
 $("#treeContainer").jstree(treeConfig);

 $('#treeContainer a').live('click',function(){
    var tree = jQuery.jstree._reference("#treeContainer");
    var currentNode = tree._get_node(null, false);
    tree.refresh(currentNode);
 });

});
</script>
</head>

<body>
 <div id="treeContainer"></div>
</body>
</html>

这就是我正在做的事情:

  • 使用JSON数据插件(但HTML和XML插件的概念类似)
  • 从数据配置对象
  • 加载初始树节点(“Root”)
  • 设置AJAX配置对象,以便所有其他节点在最初打开时通过ajax请求其子数据(适用于'state''关闭'且'children'为'empty'的任何节点)
  • 使用AJAX数据函数传递正确的查询字符串,以获取正在打开的节点的相关数据。我的示例总是提取http://localhost/tree.json?query=Value,但您可能希望对节点ID执行类似设置值的操作,以便服务器发回相关数据。

到目前为止,这仅在节点第一次打开时才对节点数据发出ajax请求。最后一步是:

  • 创建一个单击功能,使单个节点在每次单击时刷新其数据