Подскажите как сделать валидацию номера для "Средства связи"? Читал статью 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, пожалуйста.