`
s8186255
  • 浏览: 87785 次
  • 性别: Icon_minigender_1
  • 来自: 新疆乌鲁木齐
社区版块
存档分类
最新评论

jstree使用之一 jstree0.99使用

阅读更多

递归模型的前端展示将不可避免的使用到tree的结构,几番对照之后,发现tree_view似乎已经不再更新。jstree这个俄国人设计的jquery插件却生命力十足,活力四射。所以就选择这个插件进行研究。

1.搭建一个jstree的测试环境

后台使用rails,在public下创建一个目录jstree,然后将下载的jstree包中的相关内容拷贝到这个目录中:

/jstree下包含:jstree.js,jquery.js

/jstree/images:这里包含显示用的图片

/jstree/themes:这里包含各类主题,如checkbox。

这里用的版本是0.99版本(jstree版本与5月25日刚升级到1.0rc版本,变化较大,不过思路可以参考这篇文档,以后,将1.0的使用说明继续在博客中记录)

jquery的版本使用的是1.3.2,使用1.4.1好像有问题,子树不能正常显示。


2.明确目标

使用jstree插件,采用json格式,使用ajax从rails后台获取动态的子树。

前端代码:


<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>jsTree &raquo; Demo &raquo; Async HTML</title>
    <meta name="title" content="jsTree - jQuery tree plugin - Async HTML Demo" />
        <!--<link rel="stylesheet" type="text/css" href="style.css" />
        -->

    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="jquery.tree.js"></script>
    <link rel="stylesheet" type="text/css" href="/jstest/themes/default/style.css" />
  </head>
  <body  class="nosidebar" >
    <div id="container">
      <script type="text/javascript" >
        var stat =    [
          { data : "Node 1",attributes : { "id" : "node_1" }  },
          { attributes : { "id" : "node_2" }, data : "Node 2", state : "open"},
          { attributes : { "id" : "node_3" }, data : "Node 3", state : "closed"}
        ];
        $(function () {
          $.ajaxSetup({cache:false});//ajax 调用不使用缓存
          $("#async_json_1").tree({
           
            data : {
              type : "json",
              async : true,
              opts : {
                method : "GET",
                url : "/ceshi/json_test.json"
              }
            },
            lang:{
              loading:"加载中……"  //在用户等待数据渲染的时候给出的提示内容,默认为loading
            },
            ui:{
              theme_name:'classic'  //设置样式
//             theme_name : "checkbox"
            },
            callback : {
              // Make sure static is not used once the tree has loaded for the first time
              onload : function (t) {
                t.settings.data.opts.static = false;//让初始化数据只使用第一次
              },
              //n-- 节点,t是tree
              beforedata : function (n, t) {
                if(n == false)
                  t.settings.data.opts.static = stat;
                else
                  return {parent_id : $(n).attr("id") || false} // AJAX 调用参数传递
              },
              oncreate :function(n,t){
               
              }
            },
            //插件使用右键菜单支持自定义右键菜单
            plugins:{
              contextmenu:{}
  //            checkbox : {three_state : false }

            },
            rules:{multiple:"false"}

          });
        });
      </script>
      <div class="demo" id="async_json_1"></div>
    </div>

  </body>
</html>

解释如下:

1.javascript定义部分

        var stat =    [
          { data : "Node 1",attributes : { "id" : "node_1" }  },
          { attributes : { "id" : "node_2" }, data : "Node 2", state : "open"},
          { attributes : { "id" : "node_3" }, data : "Node 3", state : "closed"}
        ];

定义了初始化的树;

同时在beforedata中进行了定义:

beforedata : function (n, t) {
                if(n == false)
                  t.settings.data.opts.static = stat;
...

             }

这里使用t.settings.data.opts.static = stat,将树进行初始化。

注:代码借鉴jstree中demo和互联网上的资料。

2.数据准备中,配置ajax

            data : {
              type : "json",
              async : true,
              opts : {
                method : "GET",
                url : "/ceshi/json_test.json"
              }
            }

使用get方式从后台获取json数据

3.准备get方式客户端发送到服务器端的数据:仍然在beforedata中进行配置

              beforedata : function (n, t) {
                if(n == false)
                  t.settings.data.opts.static = stat;
                else
                  return {parent_id : $(n).attr("id") || false} // AJAX 调用参数传递
              }

这里使用return {parent_id : $(n).attr("id") || false}为get方法准备数据

 

后台rails代码

创建ceshi控制器,同时建立一个json_test.json action,代码如下:

class CeshiController < ApplicationController
  def json_test
#    if params[:parent_id] == "node_3"
      data = "[{data:\"node_1\",attributes:{id:5},state:\"closed\"},
              {data:\"node_1\",attributes:{id:6},state:\"closed\"}
              ]"
      respond_to do |format|
        format.json {render :text=>data}
      end
 #   end
  end
end

 

解释:

1.外层if语句,为了检测客户端发出的参数是否准确;

2.创建一个data变量,它是一个字符串,是json格式,满足jstree的格式需求。

data

attributes:{id:5}  //这里的id:5就是将要从用户点击树节点,要送出去的值。我们在后台可以将这个值与后台的数据库中的某个值进行对应,从而获取一个子树对应的数组,并将这个数组,变为json格式的数据,送到客户端,客户端的jstree控件进行识别,并画出子树。

3.按照这种方式也可以使用xml格式。

 

存在的问题:

目前只是将树可以展现出来,也就是完成了tree的read,另外create、update、delete尚未完成。看了jstree的1.0版本(变化非常大),这一块的工作似乎非常容易完成。

 

待续。。。近日将使用jstree的1.0版本,将心得继续放送。

 

3
2
分享到:
评论
1 楼 ihibernate 2010-06-21  
如果要是传多个参数,这里beforedata该怎么写?


callback : {
  beforedata : function(node,tree_obj){
   alert($(node).attr("id") + "  " + $(node).attr("type"));
   return {type : $(node).attr("type"),id : $(node).attr("id") || 0 }; //设置get方式传哪些参数  AJAX 调用参数传递
}
}


请问这里的return 里能这样些么?
在IE6下我的参树只能传那个ID值,type却不能传?
请问是什么原因

相关推荐

    使用jsTree实现js树形结构

    **一、jsTree 的基本使用** 1. **引入 jsTree** 在你的 HTML 文件中,你需要引入 jsTree 的核心 CSS 和 JavaScript 文件。通常,这些文件可以从 jsTree 的官方仓库或者 CDN 服务获取。例如: ```html ...

    jsTree中文api

    jsTree 是一个流行的JavaScript库,用于创建、操作和展示交互式的HTML树状视图。它提供了一套丰富的API,使得开发者能够方便地实现树形结构的各种功能,如添加、删除、修改节点,以及节点的移动。在本文中,我们将...

    基于jquery的树形结构JsTree 使用心得

    ### 一、JsTree基本使用 1. **安装与引入** 在项目中使用JsTree,首先需要下载其库文件,可以从官方网站或者其他可信的源获取。然后在HTML文件中引入jQuery和JsTree的CSS及JS文件。确保jQuery库在JsTree之前加载,...

    jsTree.v.1.0中文文档

    jsTree v.1.0是该库的一个版本,其中文文档为国内用户提供了更易理解的参考材料。 1. **基本概念** - **树状结构**:jsTree通过节点和层级关系来呈现数据,每个节点可以有子节点,形成树形层次。 - **核心功能**...

    JsTree 实例使用

    **JsTree 实例使用详解** JsTree 是一个强大的JavaScript库,专为构建交互式的树状视图而设计。它在Web开发中广泛应用于文件管理、菜单系统、组织结构展示等多种场景。JsTree 提供了丰富的功能,如动态加载、节点...

    jsTree 很好用的动态加载数

    动态加载是 jsTree 的核心特性之一,它允许在用户滚动或展开树节点时按需加载数据,而不是一次性加载所有数据。这种机制对于处理大量数据特别有用,因为它减少了初始页面加载时间,提高了用户体验。通过设置适当的...

    jsTree操作 jsTree插件简介

    jsTree 是一个基于 jQuery 的开源 JavaScript 库,用于创建交互式的树状视图。它提供了一种优雅的方式来呈现和操作数据结构,尤其适用于构建树形菜单或目录。jsTree 支持多种功能,包括动态加载、异步数据获取、节点...

    JsTree 最详细教程及完整实例

    JsTree 是一个基于 JavaScript 的开源库,用于创建交互式的树形数据结构。这个强大的工具适用于多种用途,包括文件管理、菜单系统、数据可视化等。它提供了丰富的功能,如多选、拖放、搜索、加载异步数据等,同时...

    JSTree(js写的树形菜单,支持加载10000节点以上)

    JSTree是一款基于JavaScript的开源库,专为构建功能丰富的交互式树形菜单而设计。它支持动态加载大量节点,即使面对超过10000个节点的情况,也能保持良好的性能,解决了传统方法在处理大数据量时可能导致的页面卡顿...

    手机端js tree

    在移动设备上,为了有效地展示层次结构数据,如文件系统、组织架构或导航菜单,"手机端js tree"成为了一种实用的解决方案。这个技术基于JavaScript,专为智能手机和平板电脑等移动端设备设计,提供了可自定义的树形...

    jstree目录树控件

    3. **初始化jsTree**:使用`$(selector).jstree(options)`方法初始化树控件,`selector`是树容器的选择器,`options`是一个包含配置项的对象,用于设置初始状态、加载数据的方式、使用的插件等。 4. **处理事件**:...

    jsTree树形菜单

    jsTree是一款基于JavaScript的开源库,专门用于创建交互式的树形菜单。它提供了丰富的功能和多种定制选项,适用于网页中的数据组织和展示,如导航菜单、文件系统视图或者数据层级结构的展现。jsTree在Web开发中被...

    jsTree 大集合

    创建一个 HTML 元素作为 jsTree 的容器,然后使用 `$(selector).jstree(options)` 初始化。例如: ```javascript $("#tree").jstree({ "core": { "data": [ { "id": "ajson1", "text": "Simple root node", ...

    JsTree静态例子

    本篇文章将深入探讨如何使用JsTree创建一个静态的例子。 首先,我们需要从JsTree的官方网站下载最新版本的库文件。这通常包括`jstree.js`(核心脚本)、`jstree.css`(样式表)以及可能的插件和主题文件。确保将...

    JStree(最全)

    JStree 是一个基于 JavaScript 的开源库,专用于创建交互式的树形数据结构。这个强大的工具支持多种操作,包括拖放、搜索、多选、加载异步数据(AJAX)等,广泛应用于网页中的菜单、文件浏览器、组织结构展示等场景...

    jstree用法大集合

    **jstree用法大集合** ...总的来说,这个"jstree用法大集合"是一个宝贵的资源,涵盖了`jstree`的各种应用场景和使用技巧。通过学习和实践这些示例,你可以熟练掌握`jstree`,并在实际项目中灵活运用。

    jsTree实例,jsTree实例

    jsTree 是一个强大且灵活的树型结构库,通过合理的配置和使用,可以满足多种场景的需求。通过学习和实践,你可以创建出符合项目需求的交互式树结构,提升用户体验。记得根据实际情况选择合适的数据源、插件和事件...

    bootstrap-JsTree简单dome

    Bootstrap JsTree是一个将jQuery库与Bootstrap框架相结合的插件,用于创建交互式的树形结构视图。这个简单Dome提供了一个快速入门的例子,展示了如何在网页中集成JsTree,并实现多选、单选、添加和删除节点等功能。...

    jsTree大集合学习资料

    【jsTree大集合学习资料】是一份综合性的学习资源,主要涵盖了jsTree这款JavaScript库的各个方面。jsTree是一款强大的开源库,专用于在Web应用程序中创建交互式树型视图。它提供了丰富的功能,包括数据加载、节点...

    jsTree-directive, jsTree的Angular 指令 文档.zip

    jsTree-directive, jsTree的Angular 指令 文档 jstree指令jsTree的Angular 指令文档文档使用 bower 安装$ bower i jstree-directive教程使用 jsTree,Angularjs和Expressjs语言构建一个基于We

Global site tag (gtag.js) - Google Analytics