今天发现ExtJS支持Prototype了(不喜欢在rails中混用prototype和yui),赶紧去下载一个,并试验了一下tree组件,感觉还不错,考虑以后就用ExtJS了。
闲话不说了,贴代码
schema.rb
ActiveRecord::Schema.define() do
create_table "categories", :force => true do |t|
t.column "id", :int
t.column "parent_id", :int
t.column "tree_id", :int
t.column "lft", :int
t.column "rgt", :int
t.column "name", :string
t.column "description", :string
t.column "created_at",:int
end
add_index :categories, :name, :unique => true
end
接着是model:
class Category < ActiveRecord::Base
acts_as_nested_set :scope => :tree_id
def leaf?
if self.rgt - self.lft == 1
return true
else
return false
end
end
end
这里用的是Nested_set存储树,所以只需计算节点的左右值是否连续来判断叶子节点。Nested_set查询比较好用,就是插入效率差,用于目录的存储比较合适,一般目录不会频繁更新。
然后是rhtml:
<html>
<head>
<title>r</title>
<%= stylesheet_link_tag "../javascripts/ext/resources/css/ext-all.css" %>
<%= javascript_include_tag "ext/adapter/prototype/prototype.js" %>
<%= javascript_include_tag "ext/adapter/prototype/scriptaculous.js" %>
<%= javascript_include_tag "ext/adapter/prototype/effects.js" %>
<%= javascript_include_tag "ext/adapter/prototype/ext-prototype-adapter.js" %>
<%= javascript_include_tag "ext/ext-all-debug.js" %>
</head>
<body>
<%= javascript_include_tag "category_tree.js" %>
<div id="tree-div" style="border:5px solid #99bbe8; overflow:hidden; width:130px;"></div>
</body>
</html>
让页面加载时同时加载树组件,也就是那个category_tree.js:
Ext.onReady(function(){
// shorthand
var Tree = Ext.tree;
var tree = new Tree.TreePanel('tree-div', {
animate:true,
loader: new Tree.TreeLoader({dataUrl:'http://localhost:3000/admin/category/category_tree'}), //修改这里
enableDD:true,
containerScroll: true
});
// set the root node
var root = new Tree.AsyncTreeNode({
text: 'Ext JS',
draggable:false,
id:'source'
});
tree.setRootNode(root);
// render the tree
tree.render();
root.expand();
});
这个是抄ExtJS的Demo,只是改了数据源。ExtJS需要接收JSON格式的数据,我们可以在actioncontroller中提供:
class Admin::CategoryController < ApplicationController
def category_tree
categories = Category.find_by_sql("select * from categories where parent_id is null")
data = get_tree(categories,nil)
render :text=>data.to_json, :layout=>false
end
def get_tree(categories, parent)
data = Array.new
categories.each { |category|
if !category.leaf?
if data.empty?
data = [{"text" => category.name,"id" => category.id,"cls" => "folder" ,"leaf" => false,
"children" => get_tree(category.children,category) }]
else
data.concat ([{"text" => category.name,"id" => category.id,"cls" => "folder" ,"leaf" => false,
"children" => get_tree(category.children,category)}])
end
else
data.concat([{"text" => category.name,"id" => category.id,"cls" => "file","leaf" => true}])
end
}
return data
end
end
这段代码使用递归构造了一棵树,并转换成ExtJS需要的json数据返回页面。
好啦,这时用浏览器访问就能看到效果了.只是写了一点点代码,加上ExtJS,我们就有一个树型目录了,想起以前用java+xloadtree做树型目录的那个费劲啊,哎
分享到:
- 2007-05-03 22:19
- 浏览 10800
- 评论(13)
- 论坛回复 / 浏览 (13 / 17028)
- 查看更多
相关推荐
ExtJS Tree是Ext JS库中的一个组件,用于创建和展示层次结构的数据,通常表现为树形结构。这个组件在Web应用程序中广泛使用,特别是在需要管理有层级关系的数据时,如文件系统、组织架构或者导航菜单等。动态加载是...
ExtJS Tree 是一个基于 ExtJS 框架的组件,用于构建可交互的、层级结构的树形控件。在 Web 开发中,它经常被用来展示目录结构、组织架构或者复杂的分类数据。异步加载树型是 ExtJS Tree 的一个重要特性,允许只在...
根据给定的信息,我们可以深入探讨ExtJs中Tree组件的相关知识点,包括其定义、特性以及具体的配置选项等。 ### ExtJs Tree概述 ExtJs Tree是一种基于ExtJs框架的树形控件,它允许开发者构建出复杂的数据层次结构。...
ExtJS Tree 示例是一种基于ExtJS库实现的交互式树形组件,它允许用户在Web应用程序中展示层次结构数据。在本示例中,我们将探讨如何使用ExtJS来创建、访问和操作一个树形结构,特别是在数据库操作方面,如添加和删除...
ExtJs 2.2.1 tree实例,内附mysql数据文件 1. 数据节点一次性加载 2. 节点分为两个类(项目和设备) 3. 右键菜单 4. 节点增、删、改操作 ....... 后台是java struts1。 本例旨在说明extjs的tree操作,后台操作很简陋...
ExtJS Tree 需要的数据结构是一个 JSON 数组,每个元素代表树的一个节点。节点可以包含属性如 "cls"(样式类)、"id"(唯一标识)、"leaf"(是否为叶子节点)以及 "children"(子节点数组)。例如: ```javascript ...
ExtJS Tree + JSON + Struts2 示例源代码是结合了三种技术来实现一个动态的、交互式的树形数据展示的应用。这个示例中,ExtJS用于前端UI的构建,JSON作为数据交换格式,而Struts2则作为后端MVC框架处理请求和返回...
在深入探讨ExtJS中Tree组件的使用之前,我们先来了解一下ExtJS本身。ExtJS是一个用JavaScript编写的开源前端框架,旨在帮助开发者构建复杂、高性能的Web应用程序。它提供了丰富的UI组件库,其中包括Tree(树形)组件...
ExtJS Tree是Sencha公司开发的ExtJS框架中的一个组件,用于构建可交互的树形数据结构。在网页应用中,树形结构常用于展示层级关系的数据,如目录结构、组织架构或者数据库的表关系。ExtJS Tree组件提供了丰富的功能...
ExtJS Tree 是一个功能强大的JavaScript组件,用于在Web应用程序中创建和展示层次结构的数据,它在ExtJS框架中扮演着重要角色。这个压缩包“extjs tree 学习资料”显然是为那些希望深入理解并掌握ExtJS Tree组件的...
在给定的文件中,我们关注的是“带复选框的ExtJS tree”这一主题,这涉及到ExtJS框架下的树形组件(TreePanel)如何与复选框结合,为用户提供更为灵活的数据选择和管理方式。 ### 标题解析:“带复选框的ExtJS tree...
ExtJS Tree是基于ExtJS框架实现的一种数据结构展示方式,它主要用于展示层级关系的数据,例如组织结构、文件系统等。ExtJS是一个强大的JavaScript库,专为构建富客户端Web应用程序而设计,提供了丰富的组件化功能和...
ExtJS Tree是一个强大的JavaScript库,专门用于创建交互式的树形结构。这个"extjs-tree.zip"文件包含了使用Java编写的ExtJS异步树形控件的示例代码,旨在帮助开发者快速理解和应用这一功能。ExtJS是Sencha公司开发的...
ExtJS的Tree组件是Sencha ExtJS框架中的一个重要部分,用于构建可交互的树形结构数据展示。在ExtJS中,TreePanel是用来显示和操作树形数据的主要组件,它可以用于组织层次化的信息,如文件系统、组织架构或者分类...
Ext各种组件的使用实例,Extjs tree+grid+form+panel 使用实例
ExtJs4 Checkbox Tree是基于ExtJs 4框架实现的一种特殊树形组件,它在传统的树形结构基础上增加了复选框功能。这种组件常用于需要用户多选树形数据的场景,比如权限设置、目录选择等。下面将详细介绍ExtJs4 Checkbox...
在网上下载别人的代码,改进加上CHECKBOX ,但是批量删除做不出来,希望高手完成并分享。
ExtJS Tree + JSON + Struts2 是一个常见的前端与后端交互技术组合,常用于构建动态的、数据驱动的树形结构界面。在这个项目中,`index.html` 是主页面,`tree.js` 包含了 ExtJS 的树组件相关的 JavaScript 代码,`...
ExtJS AJAX Tree是一种基于JavaScript的动态树形结构,它利用AJAX技术来异步加载节点数据,无需在服务器端生成完整的树结构。这种方式可以显著提高页面加载速度,尤其是在处理大量数据时。ExtJS是一个功能丰富的...
在ExtJS中,Tree是一个非常重要的组件,它用于呈现层级结构的数据。在处理Tree节点时,特别是涉及到链接和新窗口打开的情况,有一些特定的技术要点需要注意。 首先,标题“extjs tree 节点 链接 新窗口”指的是在...