shiyong2008
2009-08-24 00:40
浏览 159
已采纳

tabPanel里添加的组件EditorGridPanel显示数据失败

我动态添加其中一个tabPanel,使用autoLoad自动加载一个show.jsp文件。

其中show.jsp是含一个组件EditGridPanel,其显示server.xml中的内容。

单独打开show.jsp,显示正常,但将show.jsp的url作为动态添加的tabPanel的autoLoad的值时后,再打开那个tabPanel时,show.jsp中的EditGridPanel组件显示出来,但是数据不显示。

由于单独打开show.jsp显示一切正常,故原因应该出在动态添加tabPanel上,它的代码如下:

//添加树节点的单击事件    
docTreePanel.on('click',function(node,e){
        //判断标签页是否存在,若存在,激活此页,若不存在,则新建一个
        var mainTabPanel = Ext.getCmp("mainTabPanel");
        var exit = mainTabPanel.getItem(node.id);
        if(!exit){
        var tabPage = node.id;
        tabPage = mainTabPanel.add({
            id:node.id,
            height:710,
            title:node.text,
            autoLoad:{
                url:node.attributes.url,
                scripts:true
            },
        });
            mainTabPanel.doLayout(true); 
            mainTabPanel.setActiveTab(tabPage);
        }
        else{
            mainTabPanel.setActiveTab(node.id);
        }
        
    });

 

初学ext,希望大家指教。谢谢

 

 


问题补充:
感谢大家的回复,现在贴出show.jsp的代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- 处理文档类别的浏览、编辑、删除 -->
<html>
<head>
<title>文档类别浏览</title>
<link rel="stylesheet" type="text/css" href="../../extjs/resources/css/ext-all.css" />
<script type="text/javascript" src="../../extjs/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../../extjs/ext-all.js"></script>
<script type="text/javascript">

Ext.onReady(function(){
Ext.QuickTips.init();
// shorthand alias
var fm = Ext.form;

//创建列
var cm = new Ext.grid.ColumnModel([
    {
       header: "ID",
       dataIndex: 'id',
       width: 100,
    },
    {
       id:'common',
       header: "名称",
       dataIndex: 'common',
       width: 250,
       editor: new fm.TextField({
           allowBlank: false
       })
    },
    {
       header: "价格",
       dataIndex: 'price',
       width: 250,
       align: 'left',
       editor: new fm.TextField({
           allowBlank: false,
       })
    }

]);

//创建数据记录
var Plant = Ext.data.Record.create([
        {name:'id',type:'string'},
       {name: 'common', type: 'string'},
       {name: 'botanical', type: 'string'},
       {name: 'price', type: 'float'},             // automatic date conversions

  ]);

// create the Data Store
var store = new Ext.data.Store({
    //自动加载数据
    autoLoad:true,
    // load using HTTP
    url: 'plants.xml',

    //数据解析器
    reader: new Ext.data.XmlReader({
           //重要,xml文件的对象节点名为Plant,如&lt;Plant&gt;..&lt;/Plant&gt;
           record: 'Plant'
       }, Plant),

    sortInfo:{field:'common', direction:'ASC'}
});

// 创建可编辑的表格面板
var grid = new Ext.grid.EditorGridPanel({
    store: store,
    cm: cm,
    renderTo: 'editorGrid-div',
    width:600,
    height:300,
    frame:true,
    clicksToEdit:1
});

});
</script>
</head>

<body>
<div id="editorGrid-div"></div>
</body>
</html>


此种方式比较拙劣,如不行,希望大家给出实现这种效果的思路,谢谢
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • iteye_10013 2009-08-24 08:44
    已采纳

    autoLoad其实是通过ajax把对应的页面请求response过来,填入到该页面的.
    1.执行js需要配置一个参数scripts:true
    2.[b]你请求的页面包含有ext的类库,请求过来后会导致原页面出问题.[/b]

    你可以用一个html为iframe的panel,改变src来实现.
    或者目标页面只是返回一段EditGridPanel的json实现,不要包含其他的东西

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • wanghaolovezlq 2009-08-24 08:38

    这个show.jsp中的EditGridPanel组件显示是用js来动态触发的吧

    那这样就是有问题,因为autoLoad的url写成show.jsp,只能得到show.jsp生成的静态页面,但其中的js不会执行的

    评论
    解决 无用
    打赏 举报
  • iteye_10013 2009-08-24 12:05

    1.都说了,要不就是iframe嵌套jsp
    2.要不就是你的jsp返回的就是一段合法的grid的json

    评论
    解决 无用
    打赏 举报