Цвет метки флажка Extjs не меняется

#javascript #checkbox #extjs #textarea #sencha-touch-2

Вопрос:

У меня есть флажок вместе с меткой коробки и текстовой областью, как показано ниже:

 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,
    }
]
 

Я хочу, чтобы контур флажка и цвет текста метки поля менялись между двумя цветами в зависимости от того, когда текстовая область прокручивается вниз.
Я пытался использовать cls, а также динамически настраивать цвет, как показано выше, но не могу изменить цвета ни флажка, ни метки коробки. Есть какие-нибудь предложения о том, как заставить это работать?

Ответ №1:

В ExtJS флажок состоит из большего количества элементов, включая значок, метку поля и т.д. Вы можете получить доступ к этим частям с помощью флажка и использовать applyStyles их для добавления дополнительного стиля. Вы можете сначала установить красный цвет, а затем зеленый при прокрутке вниз со следующим кодом и проверить мою обновленную скрипку.

Приведенный ниже код предназначен для 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'
                    });
                }
            }]
        });

    }
});
 

Комментарии:

1. пример скрипки, которым вы поделились, кажется, работает нормально, но когда я пытаюсь включить одно и то же решение, iconElement и boxLabelElement возвращаются неопределенными (при установке флажка внутри компонента в консоли разработчика нет элемента iconElement и boxLabelElement), поэтому стили применения для них не работают для меня. Есть ли какой — либо другой способ захватить элементы и вместо этого изменить цвета?

2. Какова ваша версия / инструментарий ExtJS?

3. Я использую Extjs версии 4.2.1

4. Это как 10 лет назад. Я предлагаю перейти на более свежую версию.

5. @Ash, пожалуйста, проверьте мой обновленный ответ. В ExtJS 4.2.1 квадрат флажка представляет собой файл PNG, поэтому вы не можете установить другой цвет, как в более поздних версиях. Отключение и окрашивание этикетки коробки работает.