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

jstree使用之二 jstree1.0使用

阅读更多

在rails中使用jstree1.0版本,进行tree的操作,与前面的老版本有所不同:代码的编写与jquery的代码风格更加一致。调用起来也比较方便。

从建立区域的树状结构。

一、建立递归模型

表字段:

 id

 parent_region_id
 name

 creator_id

同时定义Region模型

class Region < ActiveRecord::Base
  belongs_to :parent_region,:class_name => 'Region',:foreign_key=>'parent_region_id'
  has_many :child_regions,:class_name => 'Region',:foreign_key=>'parent_region_id'

end

二、建立显示树的控制器:regions_controller.rb

创建index action显示树

def index

end

目的是调用index.html.erb

三、view代码

index.html.erb代码如下:

<link rel="stylesheet" type="text/css" href="http://static.jstree.com/layout.css" />

<script type="text/javascript" src="http://static.jstree.com/v.1.0rc/jquery.js"></script>
<link rel="canonical" href="http://www.jstree.com/documentation/core" />
<link type="text/css" rel="stylesheet" href="http://static.jstree.com/v.1.0rc/_docs/syntax/!style.css"/>
<script type="text/javascript" src="http://static.jstree.com/v.1.0rc/_docs/syntax/!script.js"></script>
<link rel="stylesheet" type="text/css" href="http://static.jstree.com/v.1.0rc/_docs/!style.css" />
<script type="text/javascript" src="http://static.jstree.com/v.1.0rc/jquery.cookie.js"></script>
<script type="text/javascript" src="http://static.jstree.com/v.1.0rc/jquery.hotkeys.js"></script>
<script type="text/javascript" src="http://static.jstree.com/v.1.0rc/jquery.jstree.js"></script>

<div id="demo1" class="demo">    </div>
<script type="text/javascript">
  $(function () {
    $.jstree._themes = "/jstree1.0/themes/"                 //这里按照你自己jstree的位置进行配置,
    $("#demo1").jstree({
      "plugins" : [ "themes", "json_data", "ui", "crrm", "cookies", "dnd", "search", "types", "hotkeys", "contextmenu" ],                                            //配置jstree的各种插件,呵呵,这里配全了。
      "json_data" : {                                         //配置json_data这个插件。
        "ajax" : {                                             //配置采用ajax方式获取数据
          "url":"/admin/regions/get_tree.json",              //与远端服务器发生关系,需要明确调用远端的控制器和action,分别为regions和get_tree
          "data"  : function  (n) {                          //点击节点之后,向服务器送出去的数据。这里仅仅搜出去的是树节点的id值,实际上对应的是region的id。

            return { id : n.attr ? n.attr("id").replace("node_","") : false};
          }                  
        }
      }
    })
    .bind("create.jstree", function (e, data) {           //对树绑定“创建”这个方法。
      $.post(                                             //采用ajax的post方法传递数据
      "/admin/regions/create",                          //调用后台的create action
      {                                                    //定义向服务器端传送的数据。本例中传递的只有region的id和区域的名字。希望将此保存在后台的数据库中。

        "id" : data.rslt.parent.attr("id").replace("node_",""), 

        "name" : data.rslt.name

      }
    )
    })
    .bind("rename.jstree",function(e,data){              //绑定重命名方法。
      $.post(
      "/admin/regions/update",
      {
        //"operation" : "rename_node",
        "id" : data.rslt.obj.attr("id").replace("node_",""),
        "name" : data.rslt.new_name
      },
      function (r) {
        if(!r.status) {
          $.jstree.rollback(data.rlbk);
        }
      }
    );
    })
    .bind("remove.jstree", function (e, data) {        //绑定删除方法。
      $.post(
      "/admin/regions/destroy",
      {
        "id" : data.rslt.obj.attr("id").replace("node_","")
      },
      function (r) {
        if(!r.status) {
          $.jstree.rollback(data.rlbk);
        }
      }
    );
    })
    ;
  });

</script>
解释:

1.前面的一些列的包括代码,按照及自己的环境进行设置;

2.在jstree1.0中,使用了完全将jstree作为一个方法对待。

3.在jstree方法中使用了各种配置手段,这可以参照jstree网站中document

4.在jstree1.0中,将json_data等都当作一个插件,我们需要做的事情就是配置插件各个参数

5.在这个案例中我们配置了json_data插件,同时配置实用ajax方式获取json数据;

6.其他解释参见代码中的解释。

 

四、后台的实现:

1.获取树

定义get_tree action

  def get_tree
    if  params[:id] == 'false'
      if_root = true
      @regions = Region.find(:all,:conditions=>"parent_region_id is NULL")
      json_data = get_region_tree_json(@regions,if_root)
    else
      if_root = false
      @regions = Region.find(params[:id]).child_regions
      json_data = get_region_tree_json(@regions,if_root)
    end
    #
    respond_to do |format|
      format.json {render :text=>json_data}
    end
  end

这里使用了get_region_tree_json,定义为private方法

private

  def get_region_tree_json(regions,if_root)
    json_data = String.new
    json_data += "["
    if if_root
      regions.each do |region|
        json_data += "{\"data\":\"#{region.name}\",\"attr\":{\"id\":\"#{region.id}\"},\"state\":\"closed\"}"
        json_data += "," unless region == regions.last
      end
    else
      regions.each do |region|
        json_data += "{\"data\":\"#{region.name}\",\"attr\":{\"id\":\"#{region.id}\"},\"state\":\"closed\"}"
        json_data += "," unless region == regions.last
      end
    end
    json_data += "]"
    return json_data
  end

这个方法对于jquery调用ajax方法。

 

2.新增、重命名、删除节点

  def create
    @region = Region.create(:parent_region_id=>params[:id],:name=>params[:name],:creator_id=>current_user.id)

  end


  def update
    Region.find(params[:id]).update_attributes(:name=>params[:name])
  end

  def destroy
    region = Region.find(params[:id])
    if region.child_regions.blank?
      region.destroy
    else
#呵呵这里可以写下你的提醒。
    end
   
  end

 

5
1
分享到:
评论
1 楼 chhbwf 2010-11-12  
您好,请问那部分是前台参数传到后台,然后返回之后执行的代码?及前台传递parentId,然后返回json字符串,然后调用的是那块条码呢?

相关推荐

    jstree1.0 demo

    **jstree1.0** 是一款基于JavaScript的开源库,专门用于创建、操作和展示树状数据结构。它在Web应用中广泛用于构建目录结构、文件系统浏览器、组织图表等。尽管标题提及的是"jstree1.0 demo",但实际提供的压缩包...

    jsTree.v.1.0中文文档

    **jsTree.v.1.0中文文档** jsTree是一款基于JavaScript的开源库,主要用于创建、操作和展示HTML页面上的树状结构。它适用于构建复杂的交互式界面,如文件管理系统、组织架构图、导航菜单等。jsTree v.1.0是该库的一...

    jstree v1.0 实现树形结构

    "jstree v1.0 实现树形结构" 是一个关于使用jstree库的特定版本(v1.0)来构建和管理树状数据结构的教程或项目。jstree是一个流行的JavaScript库,它允许开发者在网页上创建交互式的树视图,通常用于文件系统、组织...

    jstree 1.0 最新版

    例如,`jstree_pre1.0_fix_1`可能是一个在正式发布1.0之前的小版本更新,主要目的是修复了一些预1.0版本中发现的问题,确保正式版的稳定性和兼容性。 在实际应用中,你可以通过以下步骤集成`jstree`到项目中: 1. ...

    jsTree 1.0 中文文档.zip

    学习和使用 jsTree 1.0,你需要了解以下关键概念和方法: - **初始化**:通过 JavaScript 代码设置配置选项,如数据源、主题、插件等,然后在HTML元素上应用 jsTree。 - **操作节点**:利用 `jstree('create_node'...

    jsTree.v.1.0rc2

    总的来说,jsTree.v.1.0rc2是一个强大的前端工具,适用于构建网页中的交互式树状视图,尤其适合需要展示层级关系的数据场景,如文件系统、组织结构图等。学习和掌握jsTree的使用,将提升你在开发中处理此类问题的...

    jstree 1.0 详细介绍

    ### JsTree 1.0 详细介绍 #### 一、概述 JsTree 是一款基于 jQuery 的树形结构插件,能够帮助开发者快速构建出美观且功能丰富的树状展示界面。本篇文档将根据官方英文文档进行详细解读,并结合具体示例进行深入...

    jsTree v.1.0中文文档

    总结来说,jsTree v.1.0中文文档虽然可能存在翻译上的不精确,但仍然是学习和使用该库的重要参考资料。了解并熟练运用其核心概念、API、事件和插件,能够帮助开发者有效地构建出具有交互性和功能性的树形结构界面。

    jstree_pre1.0_fix_1

    标题 "jstree_pre1.0_fix_1" 暗示这是一个 jstree 的早期版本的修复版,可能包含一些针对特定问题的修正和改进。 在描述中提到的 "demo" 和 "docs" 部分是理解这个插件的关键。"demo" 文件夹通常包含示例代码和预览...

    jsTree1.0开发技术指南

    随着版本更新至 1.0(pre1.0),jsTree 在 API 和使用方式上有了显著的变化。本文将深入探讨 jsTree 1.0 的核心概念、配置、操作以及插件的使用。 ### 一、jsTree 1.0 的基本使用 #### 1. 引入依赖库 在开始使用 ...

    JSTree-1.0.js 基于JSONRPC 的动态树(源码)(并且支持延迟加载)

    在原来的JSTree.js进行了优化,支持加载后台数据。性能和原来的一样,单个节点可加载千个数据。如果采用延迟加载,可以轻松加载上万条数据。 前后台交互采用的是JSONRPC。 希望你那个对大家有个帮助,希望大家来...

    jstree_pre1.0_stable.zip

    总结起来,jstree_pre1.0_stable.zip提供了jstree的一个稳定预发布版本,它不仅包含了核心库,还有丰富的主题、文档和示例,便于开发者进行二次开发和自定义。无论是在网站导航、文件管理、数据可视化还是其他需要树...

    jsTree-ver1.0开发技术指南定义.pdf

    随着版本更新至 pre1.0,jsTree 的使用方式、函数名和整体结构都发生了显著变化。本文将深入探讨如何使用 jsTree 1.0 版本进行开发。 ### 1. 开始使用 jsTree 使用 jsTree 需要先引入 jQuery 库,因为 jsTree 是...

    jsTree1.0简单实例

    这是一个简单加载jsTree树的实例,里面有简单的说明,容易理解,对初学者有用

    jquery下jstree简单应用 - v1.0

    《jQuery下的jstree简单应用 - v1.0》 jQuery中的jstree是一个功能强大的JavaScript库,专门用于创建交互式的树形结构。这个库在Web开发中被广泛使用,尤其在需要展示层级关系的数据时,如文件系统、组织结构或导航...

    jstree ajax application

    根据提供的文件信息,我们可以推断出这是一篇关于 jstree 的 AJAX 应用程序的文章。jstree 是一个 jQuery 插件,用于创建树形结构的导航菜单或图谱。通过结合 AJAX 技术,可以实现动态加载数据,提高用户体验。 ###...

    jstree1.0

    **jstree1.0** 是一个用于创建交互式树型结构的JavaScript库,它允许开发者在网页上构建可操作的、丰富的树形组件。这个库特别适合于展示层次结构的数据,例如文件系统、组织结构或者导航菜单。由于其开源且具有高度...

    jstree-v.pre1.0.zip

    `jstree v.pre1.0`是该插件的一个版本,它可能包含了该插件的一些预发布特性或者改进,以满足开发者对功能和性能的需求。 **核心功能** 1. **树型展示**: `jstree`能够将HTML元素或JSON数据转换为可交互的树形结构...

    jquery jstree

    在给定的压缩包中,我们看到的是 `jsTree.v.1.0rc2` 版本。这个版本可能包含了一些基础特性和修复,但请注意,这已经是较早的一个版本。当前的jsTree版本已经发展到了3.x系列,提供了更多的功能和改进。升级到最新...

    jstree源码

    - 考虑到性能,`jstree` 使用懒加载策略,只在需要时加载子节点,尤其适用于大型数据集。 - 通过适当的配置和缓存策略,可以进一步优化`jstree`在大规模数据下的表现。 通过分析这些文件,我们可以学习如何使用和...

Global site tag (gtag.js) - Google Analytics