форма extjs не отображается на панели при втором выборе - PullRequest
0 голосов
/ 28 октября 2009

У меня есть базовый макет, где различные компоненты могут быть выбраны с помощью древовидного представления, а затем отображаются на главной панели. Это прекрасно работает для всех моих компонентов (таких как сетки), но глюки с формами.

При первом выборе формы все в порядке, как только вы попытаетесь выбрать ее снова, ничто не будет обработано.

Демо-версия доступна здесь, а в верхней части страницы есть ссылка на javascript.

http://www.somethingorothersoft.com/ext

Выбор компонента происходит в функции selectNode, и я попробовал все, что мог, без особого результата.

Редактировать , как указал Джим Барроуз, было бы лучше создать экземпляр компонента в функции create. Я не решался сделать это, так как это довольно серьезное изменение в моем реальном приложении, и я хотел сохранить экземпляры для удобства навигации между ними.

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

Редактировать Я сделал изменение, чтобы всегда создавать экземпляры форм, вот так, теперь это намного более экстренно :):

components['Form1'] = { xtype:'form', "items": [
 { "name": "Rep_ID", "allowBlank": false, "fieldLabel": "Rep" },
 { "name": "Date", "allowBlank": false, "fieldLabel": "Date", "xtype": "datefield" },
 { "name": "Time", "allowBlank": true, "fieldLabel": "Time", "xtype": "timefield"}],
 "defaults": { "xtype": "textfield" }
};

components['Form2'] = { xtype: 'form', "items": [
 { "name": "Date", "allowBlank": false, "fieldLabel": "Date", "xtype": "datefield" },
 { "name": "Time", "allowBlank": true, "fieldLabel": "Time", "xtype": "timefield"}],
 "defaults": { "xtype": "textfield" }
}

1 Ответ

0 голосов
/ 28 октября 2009

Ваша проблема здесь:

var selectNode = function(node) {

    node.select();
    node = node.attributes;
    var newpanel = components[node.component].create();
    var cp = Ext.ComponentMgr.get('center_panel');
    cp.setTitle(node.text, node.icon);

    newpanel.hideMode = 'visibility';
    newpanel.hide();
    cp.removeAll();
    cp.add(newpanel);
    cp.doLayout();
    newpanel.show();
};

и здесь:

create: function() { return this; } 

cp.removeAll() фактически уничтожает все компоненты. Таким образом, когда вызывается create, возвращать это не нужно, поэтому ничего не отображается. Компонент области просмотра автоматически уничтожает все удаленное, и панель наследует эту функцию. Вы можете либо установить autoDestory на false, либо создать новый внутри create.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...