Как заменить содержимое панели новым содержимым? - PullRequest
13 голосов
/ 02 декабря 2010

У меня есть панель regionContent, которую я добавляю в окно просмотра.

Как я могу заменить его содержимое новым содержимым?

    ...
    var regionContent = new Ext.Panel({
        id: 'contentArea',
        region: 'center',
        padding:'10',
        autoScroll: true,
        html: 'this is the original content'
    });

    var viewport = new Ext.Viewport({
        layout: 'border',
        items: [ regionMenu, regionContent ]
    });

    var newPanel = new Ext.Panel({
        region: 'east',
        title: 'Info Panel',
        width: 300,
        html: 'this is a panel that is added'
    });
    // regionContent.update(newPanel); //renders as javascript code ???
    // regionContent.remove(...) //how do I remove ALL CONTENT, I will not know what is in this panel to remove it specifically
    regionContent.add(newPanel); //adds to original content but does not replace it
    regionContent.doLayout();
    ...

.update() делает это:

alt text

.add() делает это:

alt text

Ответы [ 4 ]

8 голосов
/ 02 декабря 2010

Вы захотите использовать панель с макетом карты:

var card=new Ext.Panel({
    layout:'card',
    activeItem:0,
    items:[ regionContent , newPanel ]
});

Эта панель может затем войти в ваш видовой экран.Для переключения между ними вы будете использовать что-то вроде этого:

card.getLayout().setActiveItem(1);

Посмотрите на два макета карты для рабочих примеров: http://dev.extjs.com/deploy/dev/examples/layout-browser/layout-browser.html

7 голосов
/ 24 июня 2011

Вы не можете удалить HTML, используя .remove(), потому что он не считается элементом панели. Поэтому вам нужно использовать .update(), чтобы избавиться от этого HTML, а затем добавить новую панель.

// clear the html by replacing it with an empty string.
// calling update with no arguments would work as well.
regionContent.update('');

// add the new component
regionContent.add(newPanel);

// redraw the containing panel
regionContent.doLayout();

Из вашего скриншота видно, что вы могли использовать .update(), передав новую панель, например, .update(newPanel). Этот метод используется для обновления HTML, а не для замены компонентов. Чтобы пойти противоположным путем:

regionContent.removeAll(); // if you want to remove all the items
regionContent.update('this is the original content');
regionContent.doLayout();

Вы действительно использовали опубликованное вами решение, чтобы решить именно эту проблему? Для меня clearExtjsComponent() оставляет строку HTML «Это оригинальный контент», как на скриншоте.

3 голосов
/ 07 октября 2012
Ext.getCmp('content-panel').body.update(record.get('id'));

Это действительно будет работать

1 голос
/ 02 декабря 2010

Вот как я решил это:

function clearExtjsComponent(cmp) {
    var f;
    while(f = cmp.items.first()){
        cmp.remove(f, true);
    }
}

затем, когда я хочу заменить содержимое панели новым содержимым, я использую это:

function replaceComponentContent(cmpParent, cmpContent) {
    clearExtjsComponent(cmpParent);
    cmpParent.add(cmpContent);
    cmpParent.doLayout();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...