如何在Extjs Panel中嵌入Json结果?

时间:2009-11-17 07:59:36

标签: json extjs

我对Json结果有一些问题,并将其嵌入Extjs Panel的html中。

这是我设法到目前为止。 myPanel已嵌入mainPanel,我在代码的其他部分之间显示/隐藏了myPanel

Ajax请求检索Json结果如下:

Ext.Ajax.request({
    url: 'myStore',
    success: function(r) {
        var myItem = Ext.decode(r.responseText).itemName;
    }
})

我想将myItem嵌入到mypanel中,如下所示:

var myPanel = new Ext.Panel({
    hidden: true,
    html:myItem
})

这是myPanel嵌入到我的主面板的地方:

var mainPanel = new Ext.Panel({
    applyTo: 'mywizard',
    frame: true,
    items: [{
        id: 'top',
        xtype:'panel',
        items: [
            topPanel1,
            topPanel2
        ]
    },{
        id: 'middle',
        xtype: 'panel',
        items: [
            middlePanel1,
            middlePanel2,
            myPanel
        ]
    },{
        id: 'bottom',
        xtype: 'panel',
        items: [
            footer        
        ]
    });

目前如果我要运行代码,我在myPanel中有一个“未定义”,所以我认为myItem超出了范围,因此myPanel没有选择。因此,我想知道如何/我应该怎么做才能在myPanel中反映出myItem(Json结果)?

谢谢。

2 个答案:

答案 0 :(得分:1)

我找到了答案,经过测试并为我工作。对于任何坚持这一点的朋友。我需要做的只是用身体更新来更新html内容。

基本上,只需从mainPanel中间取出:

var middle = new Ext.Panel({
    id: 'middle',
    xtype: 'panel',
    items: [
        middlePanel1,
        middlePanel2,
        myPanel
    ]
})

当然,您需要将middle替换回mainPanel

然后,接下来是将myPanel创建为norm:

var myPanel = new Ext.Panel({
    id: 'myPanel',
    hidden: true,
    html: 'empty'
})

在Ajax请求中,您更新

Ext.Ajax.request({
    url: 'myStore',
    success: function(r) {
        var myItem = Ext.decode(r.responseText).itemName;
        var editmycontent = Ext.getCmp('myPanel');
            editmycontent.body.update(myItem);  // update myItem here
        middle.doLayout();  // refresh the changes
    }
})

就是这样!

答案 1 :(得分:0)

您在此部分中出现语法错误,更正后的代码如下所示:

var myPanel = new Ext.Panel({
    hidden: true,
    html:myItem // no ; here
});

你也必须小心确定范围问题,如果你的代码在一个类我会做那样的事情

Ext.Ajax.request({
    url: 'myStore',
    success: function(r) {
        var myItem = Ext.decode(r.responseText).itemName;
        var myPanel = new Ext.Panel({
             hidden: true,
             html:myItem // no ; here
        });
        this.parentPanel.add(myPanel);
    }
    ,scope: this // note the set the scope
});