WEBFX XTREE学习笔记 (1/461)

本帖地址: 复制地址

楼主: CMO涔漠

用户形象图片

WEBFX XTREE学习笔记

精华帖 (0) :: 良好帖 (0) :: 入门帖 (0) :: 隐藏帖 (0) 
作者 正文
froast
等级: 1星会员
froast的博客:冰月无霜

性别:
文章: 13
积分: 110
来自: 上海

       时间: 2007-08-09 13:30   关键字:  AJAX XTREE      

1.XTREE简介:

XTREE是一个基于AJAX实现的树形菜单。它的原理就是每次都只加载当前结点下的所有结点,而对开发人员来说,就是只需要按一定的格式,生成一段XML代码。XTREE可以自己定制每个结点的ICON和链接。XTREE是基于对象的,通过XTREE,你无需再自己生成HTML代码,而只要生成相应的JS 对象就可以了。

2.官方网址:

http://webfx.eae.net/dhtml/xtree/index.html,可以在这里下载到XTREE最新的版本,也有XTREE的演示的DEMO。

3.XTREE的API:

    XTREE的API很简单,就是一个抽象类WebFXTreeAbstractNode以及该抽象类的两个子类WebFXTree和WebFXTreeItem。这三个类的属性和构造函数,还有方法详见:http://webfx.eae.net/dhtml/xtree/api.html,上面写得很清晰。

4.XTREE学习笔记
    每个结点有一个状态叫做OPEN;如果结点为OPEN,则可以EXPAND;对于ITEM结点来说,永远返回FALSE;
    toggle()就是切换,如果为展开的,就收起;如果为收起的,就展开;
    XTREE生成的是静态树,它不能从XML中生成树,而是只能生成简单的静态的树,看构造函数的参数就可以知道【text】【action】
    --------------------------------------------------------------
    WebFXTreeAbstractNode:
   
    属性:
    id:唯一标识
    text: label
    action: 链接
    open: 标志位,boolean型,是否打开
    icon: 图标
    openIcon:打开时的图标
    parentNode:父结点的Reference
    childNodes: 子结点的Reference的集合
   
    方法:
    indent():缩进
    toggle():切换
    callapse():收起
    expand():展开
    callapseAll():收起全部
    expandAll():展开全部
    expandChildren():展开子结点
    callapseChildren():收起子结点
    getNextSibling():取得下一个兄弟结点的Reference
    getPreviousSibling():取得上一个兄弟结点的Reference
    toString():生成HTML代码
   
    ------------------------------------------------------------------
    WebFXTree:
   
    构造函数:new WebFXTree([text], [action], [behavior],[icon],[openIcon]);
   
    参数:
    text:
    action:
    behavior:
    icon:
    openIcon:
   
    属性:
    rendered 标志位,boolean类型,用于标记该树是否已经生成和显示。
    WebFXTreeAbstractNode的所有属性
   
    方法:
    getSelected():返回一个Reference,被选中的那个对象的Reference。
    setBehavior(sBehavior): classic,explorer;
    getBehavior():
    WebFXTreeAbstractNode的所有方法
    -------------------------------------------------------------------
    WebFXTreeItem:
    构造函数:
    new WebFXTreeItem([text],[action],[parent],[icon],[openIcon]);
   
    属性:
    WebFXTreeAbstractNode的所有属性
   
    方法:
    getFirst():返回第一个子结点的Reference
    getLast():返回嘴后一个子结点的Reference
    __________________________________________________________________________________________
   
5.XLoadTree学习笔记:
    XLoadTree与XTree的区别就在于,XTree只能生成静态树,而XLoadTree可以根据XML生成动态树。
    XLoadTree是由Xtree而来的,主要有两个类:WebFXLoadTree和WebFXLoadTreeItem,其中,WebFXLoadTree继承自WebFXTree,WebFXLoadTreeItem继承自WebFXTreeItem
    ---------------------------------------------------------------------
    WebFXLoadTree:
   
    构造函数:
    new WebFXLoadTree(sText, sXmlSrc, sAction, sBehavior, sIcon, sOpenIcon)
   
    参数:
    sXmlSrc:展开时需要用到的XML文件
    其余参数与WebFXTree一样
   
    属性:
    src: XML源文件
    loading: 标志位,boolean类型,表示正在加载XML文件
    loaded: 标志位,boolean类型, 表示XML文件已将加载完毕
    errorText: 错误描述
    WebFXTree中的所有属性
   
    方法:
    reload():重新加载XML文件
    WebFXTree中的所有方法
    -----------------------------------------------------------------------
    WebFXLoadTreeItem:
   
    构造函数:
    new WebFXLoadTreeItem(sText, sXmlSrc, sAction, eParent, sIcon, sOpenIcon)
    参数:
    eParent:可选,该结点要加入到的结点的Reference
   
    属性:
    src: XML源文件
    loading: 标志位,boolean类型,表示正在加载XML文件
    loaded: 标志位,boolean类型, 表示XML文件已将加载完毕
    errorText: 错误描述
    WebFXTree中的所有属性
   
    方法:
    reload():重新加载XML文件
    WebFXTreeItem中的所有方法
   
    XML文件的格式:
    

xml 代码
  1. <!ELEMENT tree (tree*)>  
  2.   <!ATTLIST tree   
  3.             text      CDATA   #REQUIRED   
  4.             src       CDATA   #IMPLIED   
  5.             action    CDATA   #IMPLIED   
  6.             icon      CDATA   #IMPLIED   
  7.             openIcon  CDATA   #IMPLIED>  

           

    XML文件的例子:
   

xml 代码
  1. <tree>  
  2.    <tree text="Loaded Item 1" action="href://webfx.eae.net" />  
  3.    <tree text="Loaded Item 2">  
  4.     <tree text="Loaded Item 2.1" action="javascript:alert(2.1)" />  
  5.    </tree>  
  6.    <tree text="Load &quot;tree1.xml&quot;" src="tree1.xml" />  
  7. </tree>  

在 WebFXTreeAbstractNode 的全部收起是collapseAll()方法而不是
callapseAll()别写错了

回到帖子顶部

1楼[楼主] CMO涔漠

用户形象图片

用Rails实现无限级动态树型结构!   作者:   Arden 
关键字: rails        
今天花了一小段时间写了个基于Rails和xtree的树形例子,还有很多地方需要完善,并且代码比较乱!

Migrate类

class CreateCategories < ActiveRecord::Migration 
  def self.up 
    create_table "categories", :force => true do |t| 
       t.column "name", :string 
       t.column "created_at", :datetime 
       t.column "parent_id", :integer, :default => 0, :null => false 
    end 
    %w(item1 item2 item3 item4 item5).each do |name| 
          parent = Item.new(:name=>name) 
          parent.save 
          Item.create(:name=>name+".1", :parent_id=>parent.id) 
          Item.create(:name=>name+".2", :parent_id=>parent.id) 
          Item.create(:name=>name+".3", :parent_id=>parent.id) 
     end 
  end 
  
  def self.down 
    drop_table :categories 
  end 
end 
表结构 

CREATE TABLE categories ( 
  id                int(11) NOT NULL PRIMARY KEY,               
  name              varchar(50),                                
  parent_id         int(11)                                     
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='类别表'; 
控制类 

class CategoryController < ApplicationController 
  def index 
    @categories = Category.roots    
  end 
end 
Helper类

module CategoryHelper 
  def get_tree(trees, parent) 
    tree_html = ""; 
    trees.each do |tree| 
      if tree.is_root? 
        tree_html += "var tree_#{tree.id} = new WebFXTreeItem('#{tree.name}');\r\n" 
        tree_html += "rootTree.add(tree_#{tree.id});\r\n" 
      end 
      
      if !tree.is_leaf?  
        if !tree.is_root? 
          tree_html += "var tree_#{tree.id} = new WebFXTreeItem('#{tree.name}');\r\n" 
          tree_html += "tree_#{parent.id}.add(tree_#{tree.id});\r\n" 
        end 
        tree_html += get_tree(tree.children, tree) 
      else         
          tree_html += "var tree_#{tree.id} = new WebFXTreeItem('#{tree.name}');\r\n" 
        if !parent.nil?  
          tree_html += "tree_#{parent.id}.add(tree_#{tree.id});\r\n" 
        end 
      end 
    end 
    return tree_html 
  end 
end 
模型类category.rb

class Category < ActiveRecord::Base 
  acts_as_tree 
  validates_presence_of :name 
  
  def self.roots 
    self.find(:all, :conditions=>["parent_id = ?", 0]) 
  end 
  
  def is_leaf? 
    return !self.has_children?   
  end 
  
  def is_root? 
    return self.parent_id == 0 
  end   
end 
视图文件

<html> 
  <head> 
    <title>tree</title> 
    <script type="text/javascript" src="/javascripts/xtree.js"></script> 
    <script type="text/javascript" src="/javascripts/xloadtree.js"></script> 
    
<link type="text/css" rel="stylesheet" href="/stylesheets/xtree.css" /> 
  </head> 
  
  <body>    
    <script type="text/javascript"> 
      var rootTree = new WebFXTree('Root');  
      <%= get_tree(@categories, nil)%> 
      document.write(rootTree); 
    </script> 
  </body> 
</html> 
效果图如下:



注意:需要将xtree组件的xtree.js xtree2.js xloadtree.js拷贝到javascripts目录,把xtree组件里images

目录下的文件拷贝到rails下的public/images目录下,把xtree组件里的xtree.css拷贝到rails下的stylesheets

目录下!
 
回到帖子顶部
个人信息
  • 荣誉+3
  • 荣誉+2
  • 荣誉+1
  • 荣誉-1
  • 荣誉-2
  • 荣誉-3
发表留言
  • 文章不错!
  • 精华好文!
  • 支持原创文章!
  • 帖子图文并茂,好!
  • 真知灼见,说得好!
  • 恶意广告
  • 违规内容
  • 严重灌水
  • 重复发帖
  • 标题党
你确定要删除此楼层吗
扣20点经验值