javascript initComponent不适用于Ext.panel.Panel

inb24sb2  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(89)

我目前正在使用文档https://docs.sencha.com/extjs/7.6.0/classic/Ext.grid.Panel.html中的嵌入式小提琴:

Ext.create('Ext.data.Store', {
    storeId: 'simpsonsStore',
    fields:[ 'name', 'email', 'phone'],
    data: [
        { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
        { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
        { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
        { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
    ]
});

Ext.create('Ext.grid.Panel', {
    title: 'Simpsons',
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [
        { text: 'Name', dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
    height: 200,
    width: 400,
    renderTo: Ext.getBody(),
    
     // START added code
    initComponent: function () {
        this.callParent();
    }
    // END added code
});

正如您所看到的,我添加了.initComponent()配置,并调用了this.callParent(),如文档中所述。我假设这将工作,并且与没有代码相同,因为initComponent被描述为模板方法,唯一的要求是调用this.callParent()
我想知道什么可能是失踪的,因为面板是不是在视图中正确渲染。

我也尝试过使用下面的was传递参数,但没有成功:
this.callParent.apply(this, arguments);
this.callParent(arguments);

1l5u6lss

1l5u6lss1#

在定义组件时需要定义initComponent方法。如果在创建组件示例时内联重写该方法,则不会调用initComponent方法。
更多信息-https://docs-devel.sencha.com/extjs/7.6.0/classic/Ext.Component.html#method-initComponent
以下是如何重构代码:

Ext.create('Ext.data.Store', {
    storeId: 'simpsonsStore',
    fields:[ 'name', 'email', 'phone'],
    data: [
        { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
        { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
        { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
        { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
    ]
});

在此处定义您的组件

Ext.define('MyComponent', {
    extend: 'Ext.grid.Panel',
    xtype: 'mycomponent',
    title: 'Simpsons',
    
    
    height: 200,
    width: 400,
    renderTo: Ext.getBody(),
    
    // START added code
    initComponent: function () {
        this.callParent();
        console.log('Hi');
    }
    // END added code
});

并使用如下组件:

Ext.create({
    xtype: 'mycomponent',
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [
        { text: 'Name', dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
});

它将在控制台中记录“Hi”。

相关问题