Ошибка TypeError возникает при создании экземпляра моего расширенного Ext JS FormPanel - PullRequest
1 голос
/ 30 декабря 2010

У меня есть следующий 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 ]

3 голосов
/ 30 декабря 2010

Возможно, это не лучшее исправление, но оно устранило ошибку 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);
1 голос
/ 30 декабря 2010

Вы неправильно расширяете компонент.В вашем коде отсутствуют две основные части:

  1. initComponent: {} // здесь ваши элементы должны идти для конфигураций "по умолчанию"
  2. Зарегистрируйте xtype
    Ext.reg("myRequestForm","EditRequestForm");

Пожалуйста, обратитесь к руководству по ExtJS для расширения компонентов на эта ссылка

0 голосов
/ 30 декабря 2010

Данные, передаваемые в 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'
        }]
    });
...