`
rdman
  • 浏览: 85733 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

loadmask在树上应用

    博客分类:
  • ext
 
阅读更多
<script language="JavaScript" type="text/javascript">
    <!--
    Ext.BLANK_IMAGE_URL = '../resources/ext/resources/images/default/s.gif';

    Ext.onReady(function() {
        var ddTree = new Ext.tree.TreePanel({
            el: 'ddTree',
            useArrows: true,
            enableDD: true,
            width: 200,
            height: 300,
            loader: new Ext.tree.TreeLoader({
                dataUrl: "xxx.ashx"
            }),
            rootVisible: false,
            root: new Ext.tree.AsyncTreeNode({}),
            listeners: {
                'beforeload': beforeloadHandler,
                'load': loadHandler
            }
        });

        ddTree.render();
        ddTree.expandAll(); // 展开所有结点

     var loading = null;
        function beforeloadHandler() { // 加载前事件响应处理
            loading = new Ext.LoadMask(Ext.get(ddTree.getEl()), { msg: "请等待 " });
            loading.show();
        }

        function loadHandler() { // 加载后事件响应处理
            loading.hide();
        }
    });
    -->
    </script>

分析问题:
1、是否是xxx.ashx出现异常?
     使用Firefox工作正常,所以排除,并且通过Firebug取到xxx.ashx输出json数据如下,所以该可能排除。
[{"id":59,"text":"web development","leaf":false,"children":[{"id":60,"text":"asp.net","leaf":false,"children":[]},{"id":61,"text":"php","leaf":false,"children":[]}]},{"id":62,"text":"web development","leaf":false,"children":[{"id":63,"text":"asp.net","leaf":false,"children":[]},{"id":64,"text":"php","leaf":false,"children":[]}]}]
2、TreePanel不兼容IE?
  这显然是个笑话。不过可以验证下,将Firebug取到的json数据放入root结点的children: json。在IE下工作正常。所以该可能排除。
3、TreeLoader在IE下工作不正常?
  暂时其它可能排除了,所以就它最可能了。
  那怎么解决呢?可以使用Ajax取到xxx.ashx传来的数据,然后转为json放入root结点的children就ok了。试下。
  Code
<script language="JavaScript" type="text/javascript">
    <!--
    Ext.BLANK_IMAGE_URL = '../js/ext/images/default/s.gif';

    Ext.onReady(function() {
        var forumTree = new Ext.tree.TreePanel( {
            el: 'forumtree',
            useArrows: true,
            enableDD: true,
            width: 200,
            height: 300,
            rootVisible: false,
            root: new Ext.tree.AsyncTreeNode({})
        });
       
        forumTree.render();
       
        // 加载提示
        var loading = null;
               
        function showLoading() {
            loading = new Ext.LoadMask(Ext.get(forumTree.getEl()), { msg: "请等待 " });
            loading.show();
        }

        function hideLoading() {
            loading.hide();
        }
       
        showLoading();
       
        // 由于使用TreeLoader在IE下无法正常加载数据,所以使用Ajax先获取数据再填充数据到root node下
        Ext.Ajax.request({
            url: 'xxx.ashx',
            success: function(request) {
                var data = Ext.util.JSON.decode(request.responseText);
                forumTree.getRootNode().appendChild(data);
                forumTree.getRootNode().expandChildNodes(true);
               
                hideLoading();
            },
            failure: function() {
                hideLoading();
               
                Ext.MessageBox.show({
                    title: '版块管理',
                    msg: '对不起,加载数据出现异常,请重试!',
                    buttons: Ext.MessageBox.OK,
                    icon: Ext.MessageBox.ERROR
                });
            }
        });
    });
    -->
    </script>
问题解决。。。

不过这样我们又会碰到一个问题,就是当CRUD这个树结点提交到Server后,如何刷新Tree。如果只是重新调用Ajax。会有重复的结点出现。
因为上面使用的是在root下用appendChild来实现。所以刷新时应该先删除root下的所有子结点。怎么删呢?
forumTree.root.removeChildNodes()?噢,sorry。这个方法不存在。简单我们自己来一个。
  Code
function removeChildNodes(node) {
            while(node.firstChild) {
                removeChildNodes(node.firstChild);
            }
 
            if(node.getDepth() != "0") {
                node.remove();
            }
        }

分享到:
评论

相关推荐

    extjs mask load

    通常,当你调用某个组件(如Grid或Window)的`loadMask`方法时,会在该组件上显示一个半透明的覆盖层,表示后台正在执行加载或处理操作。 `mask`功能可以结合使用`Ext.LoadMask`类,这是一个独立的组件,可以附加到...

    Ext+json+jsp动态加载树

    在动态加载树的场景中,服务器通过JSP生成JSON格式的数据,这些数据包含了树节点的信息,如节点ID、文本、子节点等,然后由前端的ExtJS应用解析并展示在树形视图上。 3. **JSP(JavaServer Pages)**:JSP是Java的...

    再探Ext中TreePanel控件和TabPanel控件搭配测试

    在实际应用中,我们可以通过配置TreePanel的属性来定制其外观和行为,例如设置rootVisible来决定是否显示根节点,或者使用loadMask来显示加载遮罩。 接着,我们来看TabPanel。TabPanel是ExtJS提供的一种布局管理器...

    JS遮罩插件

    例如,`$("#element").loadMask()`可能用于在指定的元素上显示遮罩,而`$("#element").unloadMask()`则可以移除遮罩。 此外,遮罩插件通常允许自定义样式和行为。例如,你可以改变遮罩的透明度、颜色、边框以及是否...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());...

    ext 资源汇总

    EXT.tree.Column用于设置树节点列的显示,EXT.tree.LoadMask可以在加载数据时显示遮罩。 4. **独立文件和注释**: 每个控件被编写为独立的文件,这意味着它们可以方便地被引入到项目中,降低了代码的耦合度,有利于...

    对初学者有帮助的Ext笔记

    `LoadMask`用于显示加载遮罩,`tree.body.mask()`和`unmask()`用于在树形组件上显示和移除加载提示。 7. SQL查询技巧:使用子查询和`rownum`可以在结果集中获取指定数量的记录。示例中的查询会返回`system_notice`...

    RDF 使用帮助

    RDF(Resource Description Framework)在这个上下文中并非指代万维网联盟(W3C)定义的标准数据格式,而是指一种用于企业快速开发的用户界面(UI)层封装框架。此框架对 ExtJS 进行了封装,ExtJS 是一个功能强大的 ...

    EfsFrame Web表现层API文档

    - **封装原理**:Efs通过在HTML元素(主要是`div`标签)上添加特定的属性来定义界面元素的行为与样式。这些属性(如`xtyp`)指示框架如何自动构建对应的ExtJS对象,从而极大地减少了JavaScript代码的编写量。 - **...

Global site tag (gtag.js) - Google Analytics