为啥 ext 组件没有被覆盖,尽管我完全按照文档中的说明做了?

Posted

技术标签:

【中文标题】为啥 ext 组件没有被覆盖,尽管我完全按照文档中的说明做了?【英文标题】:Why the ext component is not overriden although I did exactly as written in documentation?为什么 ext 组件没有被覆盖,尽管我完全按照文档中的说明做了? 【发布时间】:2020-12-15 22:54:53 【问题描述】:

我想覆盖 Ext.ux.LiveSearchGridPanel 以便代替文本“搜索”出现一些其他文本,例如“xyz”。

我有一个 LiveSearchGridPanel:

Ext.define('MyApp.view.main.List', 
    //extend: 'Ext.grid.Panel',
    extend: 'Ext.ux.LiveSearchGridPanel',
    xtype: 'mainlist',

    requires: [
        'MyApp.store.Personnel'
    ],

    title: 'Personnel',

    store: 
        type: 'personnel'
    ,

    columns: [
         text: 'Name',  dataIndex: 'name' ,
         text: 'Email', dataIndex: 'email', flex: 1 ,
         text: 'Phone', dataIndex: 'phone', flex: 1 
    ],

    listeners: 
        select: 'onItemSelected',
        afterrender: function() 
            console.log('We have been rendered');
        
    
);

我在 $app.dir/overrides 目录中创建了新文件 LiveSearchGridPanel123.js:

Ext.define('Ext.overrides.LiveSearchGridPanel123', 
    override: 'Ext.ux.LiveSearchGridPanel',

   initComponent: function () 
        var me = this;
       console.log(this.self.getName() + ' created 123');
        me.tbar = ['XXX', 
                xtype: 'textfield',
                name: 'searchField',
                hideLabel: true,
                width: 20,
                listeners: 
                    change: 
                        fn: me.onTextFieldChange,
                        scope: this,
                        buffer: 100
                    
                
            , 
                xtype: 'button',
                text: '<',
                tooltip: 'Find Previous Row',
                handler: me.onPreviousClick,
                scope: me
            , 
                xtype: 'button',
                text: '>',
                tooltip: 'Find Next Row',
                handler: me.onNextClick,
                scope: me
            
        ];

        me.bbar = Ext.create('Ext.ux.StatusBar', 
            defaultText: me.defaultStatusText,
            name: 'searchStatusBar'
        );

        me.callParent(arguments);
    
); 

我加了

    requires: [
        'Ext.overrides.LiveSearchGridPanel123',
   ],

在 app.js 中。

然后我做了 sencha 应用程序刷新,但组件保持不变。 你能告诉我错误在哪里吗?

screenshot

【问题讨论】:

在进行更改(如覆盖或扩展我自己的一个类)后,我喜欢删除应用程序目录中的构建目录和 bootstrap.*,然后再次构建,而不是进行应用程序刷新。 你看过这个吗? ***.com/a/14254627/1068246 【参考方案1】:

因为你打电话给父母this.callParent();

你可以试试:

Ext.define(null,
    override:'Ext.ux.LiveSearchGridPanel',
    initComponent: function() 
        const me = this;
        me.tbar = [
            xtype:'textfield'
        ];
       this.superclass.superclass.initComponent.call(this); //<-- this does the magic
    
);

【讨论】:

谢谢帕维尔。如何进一步覆盖它以在此“文本字段”中包含 x 按钮以清除其值?我尝试使用 xtype: 'searchfield',但出现错误。 fiddle.sencha.com/#view/editor&fiddle/3ard 我想,这行得通。但我建议您使用 ViewController 制作自己的 livesearchgrid 而不覆盖 Ext 版本。

以上是关于为啥 ext 组件没有被覆盖,尽管我完全按照文档中的说明做了?的主要内容,如果未能解决你的问题,请参考以下文章

尽管状态更新,为啥 vuex 组件没有更新?

为啥我在引导程序的轮播组件中看不到上一个和下一个箭头?

尽管我们在父组件中更改了两次属性的值,但 ngOnChanges 没有被调用两次

为啥范围样式没有加载到 nuxt 页面中?

为啥 Vue 渲染组件不正确?

为啥这条线没有被覆盖? Xcode 代码覆盖率