Ошибка TypeError возникает при создании экземпляра моего расширенного Ext JS FormPanel
У меня есть следующий FormPanel в моем JavaScript
EditRequestForm = Ext.extend(Ext.form.FormPanel, {
labelWidth: 75,
bodyStyle: 'padding:5px 5px 0',
width: 350,
defaults: { width: 230 },
items: [{
name: 'id',
hidden: true
}, {
fieldLabel: 'Name',
name: 'name',
allowBlank: false
}, {
fieldLabel: 'Test Plan File',
name: 'testplan'
}, {
fieldLabel: 'Scheduled Time',
name: 'scheduledtime'
}],
buttons: [{
text: 'Save'
}, {
text: 'Cancel'
}]
});
Когда я пытаюсь создать экземпляр этого с помощью следующего кода:
var form = new EditRequestForm({
header: false
});
Возникает следующее исключение:
Uncaught TypeError: Object [object Object],[object Object],[object Object],[object Object] has no method 'add'
Я не вижу ничего плохого. Если я достану header: false
звоните, происходит то же самое, так что это не так.
Что я делаю неправильно?
3 ответа
Возможно, это не лучшее решение, но оно устранило ошибку js для меня.
EditRequestForm = Ext.extend(Ext.form.FormPanel, {
labelWidth: 75,
bodyStyle: 'padding:5px 5px 0',
width: 350,
defaults: {
width: 230
},
initComponent: function () {
Ext.apply(this, {
renderTo: Ext.getBody(),
items: [{
name: 'id',
hidden: true
},
{
fieldLabel: 'Name',
name: 'name',
allowBlank: false
},
{
fieldLabel: 'Test Plan File',
name: 'testplan'
},
{
fieldLabel: 'Scheduled Time',
name: 'scheduledtime'
}],
buttons: [{
text: 'Save'
},
{
text: 'Cancel'
}]
});
EditRequestForm.superclass.initComponent.apply(this, arguments);
Вы не расширяете компонент правильно. В вашем коде отсутствуют две основные части:
- initComponent: {} // это где ваши элементы должны идти для конфигурации по умолчанию
- Зарегистрируйте xtype
Ext.reg("myRequestForm","EditRequestForm");
Пожалуйста, обратитесь к руководству по ExtJS для расширения компонентов по этой ссылке
Данные, которые вы передаете в Ext.extend, должны быть переданы в конструктор формы. Похоже, вы не пытаетесь создать новый класс с данными, передаваемыми в Ext.extend; скорее, вы пытаетесь создать экземпляр объекта формы. Попробуй это:
EditRequestForm = new Ext.form.FormPanel({
labelWidth: 75,
bodyStyle: 'padding:5px 5px 0',
width: 350,
defaults: { width: 230 },
items: [{
name: 'id',
hidden: true
}, {
fieldLabel: 'Name',
name: 'name',
allowBlank: false
}, {
fieldLabel: 'Test Plan File',
name: 'testplan'
}, {
fieldLabel: 'Scheduled Time',
name: 'scheduledtime'
}],
buttons: [{
text: 'Save'
}, {
text: 'Cancel'
}]
});