Валидация в "Средства связи"

Подскажите как сделать валидацию номера для "Средства связи"? Читал статью https://community.terrasoft.ru/questions/validacia-zapolnenia-telefona-v-detali-sredstva-svazi но this.addColumnValidator("Number", newItem.validateField, newItem); что бы в детали сделать замену валидации нужно полностью переписать то что в "BaseCommunicationViewModel" но это модуль и его нельзя замещать.

Нравится

6 комментариев

Александр, Ваш вопрос связан не с валидацией, а с замещением модулей, которое запрещено и нужны обходные решения. Это обсуждалось неоднократно, например, тут. А когда писался вопрос по приведенной Вами ссылке, замещать ещё было можно, но в комментариях осуждали уже тогда.

Зверев Александр,

 

Вот потому то и спрашиваю так как эти способы не работают, как можно сделать валидацию другим способом, пока в голову не пришло идеи не какой, может подскажите?

Не работает именно валидация или замещение? Если второе — то по ссылке выше приводил, как делать обходным способом. По сути, переопределять все стандартные схемы, которые используются для работы со средствами связи на свои аналоги.

Зверев Александр,

Ну создать полностью свой модуль с такой же логикой. А можно что бы не переписывать полностью модуль, обойтись малой кровью?

Там не переписывание всего текста модулей, а дополнение своим при помощи 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, пожалуйста.

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