ExtJS加载面板重复

时间:2016-05-18 18:25:57

标签: extjs panel loading

在我的网站上,为了加载不同的页面(作为多页面网站),我有一个主面板,其id为'content-panel'。
当我想加载一个不同的页面时,我有一个名为'loadPage'的javascript函数,它将我想要的页面(面板)加载到'content-panel'。
但是我要加载的页面必须包含以下代码:

Ext.require(['*']);
Ext.onReady(function() {
    ...
    var panel = Ext.Cmp('content-panel');
    panel.add(loginPanel);
    panel.layout.setActiveItem(loginPanel);
    panel.doLayout();
    panel.setLoading(false);
});

在这种情况下,它正在加载loginPanel的页面/面板,该页面/面板在Ext.onReady内定义 对我来说这很好,我不知道我的网站是多页的任何其他方式 但每次我想要转到页面时,它都会将该页面加载到“内容面板”,即使它之前已经加载过。我想要一种方法只将页面添加到'content-panel',如果它不在'content-panel'项目内。

更新
这是loadPage

function swap(parent, replacement, url) {
  var alpha = document.querySelector(parent);
  var target = alpha.childNodes[0];
  var omega = document.createElement(replacement);
  omega.src = url;
  omega.type = 'text/javascript';
  alpha.replaceChild(omega, target);
}
function loadPage(panel, toPanel) {
    toPanel.setLoading(true);
    swap('head', 'script', panel);
}

它的用法如下:loadPage('Ctl_base/view_admin/mainPage', Ext.getCmp('panel'));
我正在使用ExtIS的CodeIgniter。

我已尝试过的内容:
仅当panel.add(loginPanel)不存在时,我才想loginPanel 我试过了:

if(panel.getComponent(loginScreen) == undefined) { panel.add(loginPanel); }

即使panel已经拥有该组件,它也会添加该组件 我也尝试过:

function hasComponent(parent, child) {
    parent.items.items.forEach(function(item) {
        if(item == child){
            return true;
        }
    });
    return false;
}

if(!hasComponent(panel, loginPanel)) { panel.add(loginPanel); }

它也不起作用。

1 个答案:

答案 0 :(得分:0)

我已设法通过在我要加载的面板上放置 itemId 来解决此问题,并在panel.layout.setActiveItem(loginPanel);上放置panel.layout.setActiveItem('itemIdOfPanel');