Пользовательский элемент управления - не могу перехватить событие изменения значения чтобы добавить логику обработки
Добрый день!
Пытаюсь по инструкции 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, тоже не работают.
При этом пример из оригинальной инструкции реализовать дословно у меня получилось, то есть проблема получается не в привязке компонента, а в коде самого компонента.
Можете подсказать, из каких элементов должна состоять данная логика? Что должно быть в коде компонента чтобы была возможность написать кастомную логику парсинга в момент, когда введено значение?
Нравится
Добрый день, Александра!
Из вашей бизнес задачи могу предположить, что вам достаточно будет в схеме страницы написать атрибут, примером:
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-элемента. Но может быть мне нужно его включить для отслеживания таким же способом?