【问题标题】:Extjs checkbox boxLabel color not changingExtjs复选框框标签颜色不变
【发布时间】:2021-08-27 20:32:09
【问题描述】:

我有一个复选框以及一个 boxLabel 和一个文本区域,如下所示:

xtype: 'container',
items: [{
    {
      xtype: 'textarea',
      scrollY: true,
      screenX: true,
      height: 130,
      minHeight: 80,
      top: 10,
      width: 650,
      id: 'testDisplay',
      name: 'testDisplay',
      itemId: 'testDisplay',
      bind: {
         value: some text
      },
      listeners: {
         afterrender: function(cmp) {
            textAreaComp = me.down('#testDisplay');
            textAreaComp.setValue(someInfo);
            const myCheckBox = this.up('container').getComponent('testDisplayChkbox');
            this.el.down('textarea').dom.onscroll = function () {
               if (this.scrollHeight <= (this.scrollTop + this.offsetHeight)) {
                   myCheckBox.setDisabled(false);
                   myCheckBox.el.setStyle('color',red);
               }
            };
         }
      },
    },
    {
        xtype: 'checkboxfield',
        name: 'testDisplayChkbox',
        id: 'testDisplayChkbox',
        itemId: 'testDisplayChkbox',
        checked: false,
        boxLabel: someLabel,
    }
]

我正在寻找复选框的轮廓和 boxLabel 的文本颜色,以根据文本区域滚动到底部时在两种颜色之间进行更改。 我曾尝试使用 cls 以及如上所示动态设置颜色,但无法更改复选框或 boxLabel 的颜色。关于如何让它发挥作用的任何建议?

【问题讨论】:

    标签: javascript checkbox extjs textarea sencha-touch-2


    【解决方案1】:

    在 ExtJS 中,复选框由更多元素组成,包括图标、框标签等。您可以从复选框访问这些部分并使用applyStyles 添加额外的样式。您可以先将颜色设置为红色,然后使用以下代码滚动到底部时设置为绿色,并查看my updated fiddle。

    以下代码适用于 ExtJS 4.2.1。

    Ext.application({
        name: 'Fiddle',
        launch: function () {
            Ext.create('Ext.container.Container', {
                renderTo: Ext.getBody(),
                layout: {
                    type: 'vbox',
                    align: 'stretch'
                },
                width: 500,
                items: [{
                    xtype: 'textareafield',
                    flex: 1,
                    value: 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?',
                    afterRender: function () {
                        const myCheckBox = this.up('container').getComponent('myCheckBox');
                        this.el.down('textarea').dom.onscroll = function () {
                            if (this.scrollHeight <= (this.scrollTop + this.offsetHeight)) {
                                myCheckBox.setDisabled(false);
                                myCheckBox.boxLabelEl.applyStyles({
                                    color: 'green'
                                });
                            }
                        };
                    }
                }, {
                    xtype: 'checkboxfield',
                    itemId: 'myCheckBox',
                    boxLabel: 'Lorem ipsum',
                    checked: false,
                    disabled: true,
                    afterRender: function () {
                        this.boxLabelEl.applyStyles({
                            color: 'red'
                        });
                    }
                }]
            });
    
        }
    });
    

    【讨论】:

    • 您分享的小提琴示例似乎工作正常,但是当我尝试合并相同的解决方案时,iconElement 和 boxLabelElement 返回未定义(在开发人员控制台的组件内部检查时没有 iconElement 和 boxLabelElement)所以这些上的 applyStyles 对我不起作用。有没有其他方法可以抓取元素并更改颜色?
    • 你的 ExtJS 版本/工具包是什么?
    • 我使用的是 Extjs 版本 4.2.1
    • 这就像 10 岁。我建议升级到更新的版本。
    • @Ash 请检查我更新的答案。在 ExtJS 4.2.1 中,复选框的正方形是 PNG 文件,因此您不能像在以后的版本中那样设置不同的颜色。框标签的禁用和着色工作。
    猜你喜欢
    • 2017-11-14
    • 2020-08-29
    • 2013-06-07
    • 2015-01-05
    • 1970-01-01
    • 2021-01-12
    • 2017-02-05
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多