Подскажите как сделать валидацию номера для "Средства связи"? Читал статью https://community.terrasoft.ru/questions/validacia-zapolnenia-telefona-v-detali-sredstva-svazi но this.addColumnValidator("Number", newItem.validateField, newItem); что бы в детали сделать замену валидации нужно полностью переписать то что в "BaseCommunicationViewModel" но это модуль и его нельзя замещать.
Нравится
Александр, Ваш вопрос связан не с валидацией, а с замещением модулей, которое запрещено и нужны обходные решения. Это обсуждалось неоднократно, например, тут. А когда писался вопрос по приведенной Вами ссылке, замещать ещё было можно, но в комментариях осуждали уже тогда.
Зверев Александр,
Вот потому то и спрашиваю так как эти способы не работают, как можно сделать валидацию другим способом, пока в голову не пришло идеи не какой, может подскажите?
Не работает именно валидация или замещение? Если второе — то по ссылке выше приводил, как делать обходным способом. По сути, переопределять все стандартные схемы, которые используются для работы со средствами связи на свои аналоги.
Зверев Александр,
Ну создать полностью свой модуль с такой же логикой. А можно что бы не переписывать полностью модуль, обойтись малой кровью?
Там не переписывание всего текста модулей, а дополнение своим при помощи override. Но потом и замена всех упоминаний стандартного модуля на свой аналог.
Зверев Александр,
Спасибо, получилось как описано в статье.
Сделал замещение BaseCommunicationDetail
define("BaseCommunicationDetail", ["KtValidBaseCommunicationViewModel"],
function() {
return {
attributes: {},
messages: {},
methods: {},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
});и BaseCommunicationViewModel
define("KtValidBaseCommunicationViewModel", ["terrasoft", "BaseCommunicationViewModel"],
function(Terrasoft) {
Ext.define("Terrasoft.KtValidBaseCommunicationViewModelOverrided", {
override: "Terrasoft.BaseCommunicationViewModel",
/**
* @override
* ######### ######### ###### ########.
* @param {String} value ########### ########.
* @return {Boolean} true #### ###### ######## ##### ########.
*/
isPhoneNumber: function(value) {
//Terrasoft.SysSettings.querySysSettingsItem("CommunicationPhoneRegExpValid", function(phoneRegExp) {
// var phonePattern = new RegExp(this.get("PhoneRegExp"));
// return phonePattern.test(value);
//}, this);
var phonePattern = /^\98(\(\d{3}\)\d{3}\-\d{2}\-\d{2})$/;
return phonePattern.test(value);
},
});
}
);Все отлично работает если вшить регулярное выражение.
А как можно получить из системной настройки его? Получение значение в ней асинхронное и нужно сделать через callback, но не как не выходит. Помогите в реализации такого callback, пожалуйста.