`
sacred02
  • 浏览: 6969 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

dojo1.1树的两种实现——懒加载树(需要时加载)

阅读更多
/*
* @return 类似于这样的节点列表,json格式:<br> { identifier: 'objectId', label: 'title',
* items: [ { "type":"root","title":"1a","objectId":"1","widgetId":"1",
* "children":[ {"_reference":"21"}, {"objectId":"22","_reference":"22"} ] },
* {"type":"stub","title":"21b","objectId":"21","widgetId":"21"},
* {"type":"stub","title":"22b","objectId":"22","widgetId":"22"} ] }
* @auth: hi.baidu.com/javaroad
*/
public String getRoots() throws JSONException {
   ITreeFactory factory = (ITreeFactory) CrmContexts.getBean(CrmContexts.getRequestParam("treeId"));

   Object[] nodes = factory.getRoots();
   JSONArray ret = new JSONArray();
   if (nodes == null) {
    return ret.toString();
   }
   for (int i = 0; i < nodes.length; i++) {
    if (nodes[i] == null)
     continue;
    JSONObject obj = new JSONObject();
    Object node = nodes[i];
    String id = factory.getId(node);
    obj.put("objectId", id);
    obj.put("type", "root");
    obj.put("title", factory.getTitle(node));
    if (!factory.isLeaf(node)) {
     // 有子编码
     Object[] children = factory.getChildren(node);
     if (children != null && children.length > 0) {
      // 有孩子节点
      JSONArray child = new JSONArray();
      for (int j = 0; j < children.length; j++) {
       JSONObject node1 = new JSONObject();
       node1.put("_reference", factory.getId(children[j])); // root使用reference,
       // childer使用stub
       // node1.put("objectId", factory.getId(children[j]));
       child.put(j, node1);
      }
      obj.put("children", child);

      // root需要把各个下级children也加进去
      for (int j = 0; j < children.length; j++) {
       JSONObject node1 = new JSONObject();
       node1.put("objectId", factory.getId(children[j]));
       // node1.put("title", factory.getTitle(children[j]));
       node1.put("type", "stub");
       ret.put(node1);
      }
     }
    }
    ret.put(obj);
   }

   String retu = "{identifier: 'objectId', label: 'title', items: " + ret.toString() + "}";
   return retu;
}

/*
* @return 类似于这样的节点列表,json格式:<br> {
* "type":"node","title":"22b","objectId":"22","widgetId":"22", "children":[
* {"stub":"33"}, {"stub":"44"} ] }
* @auth: hi.baidu.com/javaroad
*/
public String getChildren() throws JSONException {
   String id = CrmContexts.getRequestParam("objectId");
   ITreeFactory factory = (ITreeFactory) CrmContexts.getBean(CrmContexts.getRequestParam("treeId"));
   JSONObject obj = new JSONObject();
   Object node = factory.getNodeById(id);
   obj.put("objectId", id);
   obj.put("title", factory.getTitle(node));
   obj.put("type", "node");
   if (!factory.isLeaf(node)) {
    // 有子节点
    Object[] children = factory.getChildren(node);
    if (children != null && children.length > 0) {
     // 有孩子节点
     JSONArray child = new JSONArray();
     for (int j = 0; j < children.length; j++) {
      JSONObject node1 = new JSONObject();
      // 这里统一用reference不用stub了
      node1.put("stub", factory.getId(children[j]));
      child.put(j, node1);
     }
     obj.put("children", child);
    }
   }

   return obj.toString();
}
分享到:
评论
7 楼 sacred02 2008-09-06  
我想问一下如果在json文件中出现中文该怎么解决乱码问题

都用utf-8编码应该不会出现中文问题。如果出现了中文乱码,试试用urldecode吧。乱码的问题要根据实现情况来分析。
6 楼 sacred02 2008-09-06  
这样的话,我发现了两个问题:
1.当我调用store.deleteItem的时候,除了root跟第一级子结点可以删除外,其它级的结点都不可以删除!请问这是怎么回事呢?
2.当我调用store._getItemByIdentity(id)或是store._getItemByIdentity(id)时,除了root跟第一子结点返回[object,object]外,其它级的结点都返回null,这又是怎么一回事呢??


========================================================================
我想反问一下,你的树是否能正常的显示三级以上的结点呢?

另外,想要更新树结点可以这样去实现:
<div dojoType="dijit.Tree" id="mainFrameTree" model="continentModel" openOnClick="false">
<script type="dojo/method" event="onClick" args="item">
selectedNode = item;
</script>
</div>


js ..

var store = dijit.byId("mainFrameTree").store;
store.deleteItem(selectedNode);
selectedNode=null;
根本就可以及不用去重新搜索结点了。
5 楼 hanjian 2008-08-31  
我想问一下如果在json文件中出现中文该怎么解决乱码问题
4 楼 crazybull 2008-08-20  
这样的话,我发现了两个问题:
1.当我调用store.deleteItem的时候,除了root跟第一级子结点可以删除外,其它级的结点都不可以删除!请问这是怎么回事呢?
2.当我调用store._getItemByIdentity(id)或是store._getItemByIdentity(id)时,除了root跟第一子结点返回[object,object]外,其它级的结点都返回null,这又是怎么一回事呢??

请指教啊....
3 楼 azllza 2008-06-27  
买袭击 你的回复太逗
2 楼 sacred02 2008-06-25  
前台页面可以参考dojox\data\demos\demo_LazyLoad.html
及store: dojox\data\demos\stores\LazyLoadJSIStore.js

stroe只需要自己进行一点点扩展
1 楼 cscs31 2008-06-25  
在页面上是如何实现的?直接通过xhrget吗?

相关推荐

    dojo1.1 javascript框架

    Dojo 1.1 JavaScript 框架是一个强大的前端开发工具集,专为构建富互联网应用程序(RIA)而设计。这个框架在2005年由SitePen公司推出,旨在提供一套完整的JavaScript库,以简化Web开发过程,提高开发效率。Dojo的...

    DOJO权威指南+DOJO1.1源码

    **DOJO权威指南+DOJO1.1源码** DOJO是一个开源的JavaScript库,它提供了丰富的工具和功能,用于构建交互式Web应用程序。这个资源集合包括了《DOJO权威指南》的中文版以及DOJO 1.1的源代码,为深入理解和应用DOJO...

    基于dojo的动态树

    【基于Dojo的动态树】是一种使用JavaScript库Dojo Toolkit创建的交互式树形结构,常用于展现层次化的数据或导航菜单。Dojo Toolkit是一个功能强大的JavaScript库,它提供了多种UI组件,包括Tree组件,可以方便地在...

    dojo异步树.js

    dojo异步树.js 实现异步加载节点功能

    Requirejs异步加载Dojo1.6

    在加载Dojo模块时,可以利用Requirejs的异步加载特性,只加载当前需要的模块,而不是一次性加载整个Dojo库,这有助于优化性能。 ### 文件结构与压缩包子文件 在名为"**DojoAMD**"的压缩包中,可能包含以下内容: - ...

    dojo所有jar包dojoroot

    在实际开发中,"dojoroot"这个目录可能包含了Dojo所有版本的jar包,你需要根据项目的具体需求选择合适的版本,并通过配置类加载器(如ClassPath或Maven、Gradle等构建工具)将它们添加到项目依赖中。在Java环境下,...

    dojo的包加载机制

    `dojo.js`是Dojo的核心库,其中包含了包加载的实现。`javascript`可能是一个目录,包含了额外的JavaScript资源。`mysrc`可能也是一个目录,存放了用户的源代码。通过查看这些文件,尤其是`dojo.js`中的注释和调试...

    dojo树实例

    【Dojo树实例详解】 Dojo是一个强大的JavaScript库,它为Web开发提供了丰富的工具和功能,包括构建用户界面、处理数据、实现动画效果等。在Dojo中,树(Tree)组件是一个常用的UI元素,常用于展示层级结构的数据。...

    dojo异步树js

    dojo异步树js

    dojo 树形列表 dijit.tree

    Dojo的`dojo.data.ItemFileReadStore`或`dojo.store.JsonRest`可以与服务端API配合,实现按需加载节点。当用户展开树的一个分支时,会触发请求来获取该分支的子节点。 3. **分级** 分级树意味着树形列表中的节点有...

    dojo dojo实例 dojo例子 dojo资料 dojo项目 dojo实战 dojo模块 dojo编程

    `require`和`define`是两个关键函数,`require`用于加载模块,`define`用于定义模块。 2. **dojo/_base**:这是Dojo的基础模块,包含了Dojo的基本功能,如对象创建、事件处理、DOM操作等。例如,`dojo/query`用于...

    struts2.2.1.1帮助文档——英文

    这个"struts2.2.1.1帮助文档——英文"是开发者的重要参考资料,它提供了关于Struts2框架核心组件、配置、拦截器、插件以及API的详细信息。以下是基于该文档和Struts2.2.1.1版本的一些关键知识点: 1. **MVC设计模式...

    dojo 学习笔记 表单 树形列表

    和前一个树形菜单 大多数例子是基于 PHP 的 发现很多 dojo 学者想下载 dojo 的API…… 结论是:下不到的! 发现很多想下载一些帮助例子,在http://download.dojotoolkit.org/ 下才能找到,进去点版本,比如 ...

    dojo enhancedGrid pagination 分页实现

    本篇文章将深入探讨如何利用dojo enhancedGrid实现分页功能,以及如何通过静态数据和JSON文件加载数据,并使用XHR(XMLHttpRequest)进行数据请求。同时,我们还将讨论如何使用fetch API实现分页、过滤和排序。 ...

    dojo任意级树的节点转移

    本篇将详细探讨"dojo任意级树的节点转移"这一主题,它是Dojo框架在处理树形数据结构时的一个关键操作。 首先,我们要理解Dojo Tree。Dojo Tree是一个可交互的、多级的树状视图,它允许用户通过点击或拖拽来展开、...

    Dojo构建Ajax应用程序源码(包括书中用到的dojo-release-1.1.2)

    这个压缩包包含了Dojo框架的一个早期版本——dojo-release-1.1.2,它对于了解Dojo的历史和学习Ajax应用程序的构建非常有价值。在JavaScript的世界里,Ajax(异步JavaScript和XML)技术允许网页在不刷新整个页面的...

    DOJO 学习笔记 dojo

    当你声明需要使用某个包时,实际上是在要求加载该包下的所有模块。在 Dojo 中,使用 `dojo.require` 来声明所需的模块和包,类似于其他编程语言中的导入或使用语句。 `djConfig` 是 Dojo 的全局配置对象,允许你在...

    dojo学习...........

    - 模块加载管理:Dojo的动态加载机制可以根据需要按需加载模块,优化页面性能。 - DND(Drag-and-Drop):`dojo.dnd`模块实现了强大的拖放功能,使得交互操作更加直观。 学习Dojo不仅需要理解其模块和包的概念,还...

    AJAX之Dojo实现登陆框

    AJAX(Asynchronous JavaScript and XML)是一种在不刷新整个网页的情况下,通过后台与服务器进行少量数据交换,更新部分网页的技术。Dojo是一个强大的JavaScript库,它提供了一系列丰富的功能,包括AJAX交互、DOM...

Global site tag (gtag.js) - Google Analytics