Добрый день!

Пытаюсь по инструкции https://community.terrasoft.ua/articles/kak-sozdat-polzovatelskii-eleme… добавить кастомный элемент управления (задача - сделать поле textEdit, которое будет парсить введенную строку и возвращать число)

Столкнулась с проблемой: не получается привязать логику к событию сhange.

Как привязываю:

Ext.define("Terrasoft.controls.ITdsDataControl", {
	/*extend: "Terrasoft.Component",*/
	extend: "Terrasoft.controls.TextEdit",
init: function() {
		this.callParent(arguments);
		this.addEvents(
			"myMethod",
			"onChange" //пытаюсь привязать стандартный метод к событиям
		);
	},
onChange: function(event){
        var value = this.getTypedValue();
        value = value+"ttt";
        this.setValue(value); //пытаюсь увидеть изменилось ли значение
        this.setReadonly = true;//или хотя бы изменилась ли редактируемость поля
        this.setTimeString(value);
        this.reRender();
        this.callParent(arguments);
        };



Брейк-поинты и дебаггер, если добавляю в метод onChange, тоже не работают.

При этом пример из оригинальной инструкции реализовать дословно у меня получилось, то есть проблема получается не в привязке компонента, а в коде самого компонента.

 

Можете подсказать, из каких элементов должна состоять данная логика? Что должно быть в коде компонента чтобы была возможность написать кастомную логику парсинга в момент, когда введено значение?

Нравится

2 комментария

Добрый день, Александра!

Из вашей бизнес задачи могу предположить, что вам достаточно будет в схеме страницы написать атрибут, примером:

attributes: {
			"UsrText": {
                dataValueType: Terrasoft.DataValueType.TEXT,
                dependencies: [
                    {
						columns: ["UsrText"],
                        methodName: "calculateNumber"
                    }
                ]
            }
		},

При изменении поля UsrText будет запускаться метод calculateNumber и уже в нём вы можете сделать всё, что вам необходимо.

Дима Вовченко,

Спасибо за предложение. Но в моем случае задача стояла именно сделать компонент, который потом можно будет использовать на различных страницах и в нескольких экземплярах. Поэтому логику важно вынести в новый модуль. 

 

 

В статье-примере события wrap-элемента отслеживались, насколько я поняла, после привязки их в функции:

initDomEvents: function() {

        this.callParent(arguments);

        var wrapEl = this.getWrapEl();

        if (wrapEl) {

            wrapEl.on("click", this.onClick, this);

        }

    },

У меня (если я правильно поняла логику) нужно событие change самого textEdit а не wrap-элемента. Но может быть мне нужно его включить для отслеживания таким же способом?

 

Показать все комментарии