extjs 在extJ中向元素添加数据

uyto3xhc  于 2022-11-04  发布在  其他
关注(0)|答案(3)|浏览(230)

我在ExtJs中搜索并添加一个data-cy到我的元素中,但是似乎没有任何效果。我想添加它的地方是下面的一个:

items: [{
                        xtype: 'values',
                        name: 'value_x',
                        hideTrigger: true,
                    }

整个代码都能工作,那么问题是它不能识别它。我已经试过这些代码了,但它们中的任何一个都能工作:
第一个
我用我的data-cy替换了data-step和data-intro,但什么都没有。问题是它没有返回任何错误,但当我打开localhost时,data-cy(我也尝试过使用data-attribute和data-intro)没有被放入DOM中。

oaxa6hgo

oaxa6hgo1#

更新:我解决了这个问题使用简单

autoEl: {
        'data-cy': ’1'
    }

而不指定标记。

kxxlusnw

kxxlusnw2#

不幸的是,你没有告诉我们你使用的是哪个版本。从这个例子来看,我认为它是“经典”框架,我猜是最新版本。
这在我的小提琴中起作用:

Ext.define('Fiddle.Container', {
    extend: 'Ext.Container',
    xtype: 'custom',

    autoEl: {
        tag: 'div',
        'data-step': '1',
        'data-cy': 2
    }
});

如果你不添加标签,它会自动使用div,这样你的答案也会有效。但是为了好玩,把div换成blockquote,你会更详细地看到它是如何工作的。
在“MODERN”中,您可以用途:

Ext.define('Fiddle.Custom', {
    extend: 'Ext.Component',
    xtype: 'custom',

    template: [{
        reference: 'bodyElement',
        tag: 'blockqoute',
        cls: Ext.baseCSSPrefix + 'body-el',
        uiCls: 'body-el',
        'data-cy': 1
    }],

});
332nm8kg

332nm8kg3#

有一种更好的方法可以做到这一点。你也可以用任何其他的值来扩展它。

{
     xtype: 'button',
     text: 'Login',
     handler: 'doLogin',
     testId: 'loginBtn',
}

然后重写Ext.Component.js

Ext.define('Portal.overrides.Component', {
    override: 'Ext.Component',

    /**
     * convert testId into data-cy
     */
    onRender() {
        this.callParent(arguments);
        const { el } = this;
        const testId = this.testId || this.itemId || '';
        if (el && el.dom && !Ext.isEmpty(testId) && Ext.isEmpty(this.inputAttrTpl)) {
            const attId = this.cyAtt || 'data-cy';
            el.dom.setAttribute(attId, testId);
        }
    },
});

Got that code from here: Github

相关问题