Вывода текста в область валидации полей ввода (baseedit.js)
Здравствуйте.
Нужно реализовать возможность вывода текста в область валидации компонентов, не используя механизм валидации.
Реализовал следующий код:
return {
diff: /**SCHEMA_DIFF*/[
{
"operation": "merge",
"name": "Address",
"values": {
"bindTo": "Address",
"controlConfig": {
"focus": {"bindTo": "onAddressFocused"},
"blur": {"bindTo": "onAddressBlur"}
}
}
}
]/**SCHEMA_DIFF*/,
methods: {
onAddressFocused: function(config) {
this.showAddressMask(config.scope, true);
},
onAddressBlur: function(config) {
this.showAddressMask(config.scope, false);
},
showAddressMask: function(scope, isShow) {
if (isShow) {
var AddressMaskMessage = this.get("Resources.Strings.AddressMaskMessage");
scope.showValidationMessage(AddressMaskMessage);
} else {
scope.showValidationMessage("");
}
}
}
};
});
При фокусе и потере фокуса события срабатывают, но после выполнения функции showValidationMessage, подсмотренной в baseedit.js, сообщение не появляется.
Подскажите пожалуйста чего не хватает.
Нравится
а в scope у вас что? showValidationMessage - это метод контрола, на странице такого нет.
а лучше попробуйте сами отладиться
Андрей, в приложение файл config.txt с копией дерева config из консоли.
Насколько я понимаю при подписке на focus контрола, в функцию передается объект со стандартной функцией applyHighlight(она тоже срабатывает, т.к. синяя рамка отрисовываеться) которая подписана на focus контрола и scope(сам контрол).
В файле можно увидеть что в прототипе scope(контрола) есть функция showValidationMessage.
Т.е. я вызываю функцию контрола showValidationMessage, но ничего не появляется.
Что я делаю неправильно?
Здравствуйте!
Функция showValidationMessage должна выполняться в контексте Terrasoft.BaseEdit.
В данном случае обработчик фокуса не содержит аргументов, т.е. scope – пустой.
"Дашкевич К." написал:Т.е. я вызываю функцию контрола showValidationMessage, но ничего не появляется.
Пожалуйста, уточните, что происходит при вызове этой функции, есть ли ошибки?
Также проблема может быть связана с пустым AddressMaskMessage.
"Павел Баштовой" написал:
Дашкевич К. пишет:
Т.е. я вызываю функцию контрола showValidationMessage, но ничего не появляется.
Пожалуйста, уточните, что происходит при вызове этой функции, есть ли ошибки?
Также проблема может быть связана с пустым AddressMaskMessage.
Ошибок нет, функция выполняется, но текст не выводиться.
Можно поподробнее про AddressMaskMessage.
Исходя из реализованного Вами кода, AddressMaskMessage это локализованная строка, отвечающая за выводимое в строке валидации значение. И в случае, если его значение пустое, то выводить будет нечего.
Нет, даже если выводить текст напрямую, он не выводиться.
Зато с помощью функции showValidationMessage, получается менять текст, уже выведенный с помощью стандартного механизма валидации.
Проблема в том что функция showValidationMessage выводит текст в элемент с классом class="base-edit-validation", но не отображает его style visibility=hidden. Буду искать функцию которая отвечает за его отображение.
Может подскажите как из моего контекста изменить style элемента компонента TextEdit.
Можно попробовать переопределить класс, добавив .AddClass.
Также можно вызвать SetValidationInfo c параметром isValid="true", в baseedit.js
Павел, спасибо за наводку в SetValidationInfo нашел функцию отображения контейнера с текстом валидации.
В итоге выглядит так:
define("BaseAddressPageV2", ["BusinessRuleModule"], function(BusinessRuleModule) { return { diff: /**SCHEMA_DIFF*/[ { "operation": "merge", "name": "Address", "values": { "bindTo": "Address", "controlConfig": { "focus": {"bindTo": "onAddressFocused"}, "blur": {"bindTo": "onAddressBlur"} } } } ]/**SCHEMA_DIFF*/, methods: { onAddressFocused: function(config) { this.showAddressMask(config.scope, true); }, onAddressBlur: function(config) { this.showAddressMask(config.scope, false); }, showAddressMask: function(scope, isShow) { var AddressMaskMessage = this.get("Resources.Strings.AddressMaskMessage"); var validationEl = scope.getValidationEl(); validationEl.setVisible(isShow); scope.showValidationMessage(isShow ? AddressMaskMessage : ""); } } }; });