Добавить замещающий клиентский модуль

Еще новичок в разработке. Нужно создать замещающий клиентский модуль.
Вот родительская схема:

define('CityPage', ['ext-base', 'terrasoft', 'sandbox',
'City', 'CityPageStructure', 'CityPageResources', 'GeneralDetails', 'LookupUtilities', 'BusinessRuleModule'],
function(Ext, Terrasoft, sandbox, entitySchema, structure, resources, GeneralDetails, LookupUtilities,
BusinessRuleModule) {
structure.userCode = function() {
this.entitySchema = entitySchema;
this.name = 'CityCardViewModel';
this.schema.leftPanel = LookupUtilities.GetBaseLookupPageStructure();
};
structure.finalizeStructure = function() {
var baseElementsControlGroup = this.find('baseElementsControlGroup');
if (baseElementsControlGroup) {
var items = baseElementsControlGroup.items;
items.splice(2, 0, {
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'Country',
columnPath: 'Country',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true
});
items.splice(3, 0, {
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'Region',
columnPath: 'Region',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true,
rules: [{
ruleType: BusinessRuleModule.enums.RuleType.FILTRATION,
autocomplete: true,
baseAttributePatch: 'Country',
comparisonType: Terrasoft.ComparisonType.EQUAL,
type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
attribute: 'Country',
attributePath: '',
value: ''
}]
});
items.splice(4, 0, {
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'TimeZone',
columnPath: 'TimeZone',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true
});
baseElementsControlGroup.items = items;
}
};
return structure;
});

Вот моя схема, которая должна замещать родительскую (выше). Что не так в коде замещающей схемы:
define("CityPage", ['ext-base', 'terrasoft', 'sandbox',
'City', 'CityPageStructure', 'CityPageResources', 'GeneralDetails', 'LookupUtilities', 'BusinessRuleModule'],
function(Ext, Terrasoft, sandbox, entitySchema, structure, resources, GeneralDetails, LookupUtilities,
BusinessRuleModule) {
return {
structure: "City",
items.splice(4, 0, {
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'UsrRayon',
columnPath: 'UsrRayon',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true
});
};
});

Нравится

1 комментарий

Здравствуйте, Анастасия.

"Злыднева Анастасия Сергеевна" написал:Что не так в коде замещающей схемы:

Все зависит от задачи, которую вы себе поставили

Во первых, вы должны создать замещающий модуль так, как указано с статье https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/sozdanie-polzo… (если вдруг вы не знали этого, т.к.

"Злыднева Анастасия Сергеевна" написал:Еще новичок в разработке.

Во вторых, судя по исходному коду базового модуля, он является моделью представления в связке MVVM. Подробнее смотрите здесь https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/shablon-mvvm-e…

В третьих. В базовой схеме функция, обявленная в модуле, возвращает модифицированный объект structure, дополненный двумя свойствами-методами. Вы же возвращаете новый объект с новыми свойствами.
Примерное решение будет выглядеть так (нужно проверить, т.к. набирал в блокноте без проверки)

define("CityPage", ['ext-base', 'terrasoft', 'sandbox','City', 'CityPageStructure', 'CityPageResources', 'GeneralDetails', 'LookupUtilities', 'BusinessRuleModule'],
	function(Ext, Terrasoft, sandbox, entitySchema, structure, resources, GeneralDetails, LookupUtilities, BusinessRuleModule) {
	return {
		//Запомнить свойство-метод в локальную переменную
		var s = structure.finalizeStructure;
		//Переопределить свойство-метод базового модуля в замещающем
		structure.finalizeStructure = function() {
			//вызвать свойство-метод базового модуля
			s();
			// получить группу контролов
			var baseElementsControlGroup = this.find('baseElementsControlGroup');
			//если найдена
			if (baseElementsControlGroup) {
				//получить ее элементы
				var items = baseElementsControlGroup.items;
				// добавить атрибут в элемент
				items.splice(4, 0, {
					type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
					name: 'UsrRayon',
					columnPath: 'UsrRayon',
					dataValueType: Terrasoft.DataValueType.LOOKUP,
					visible: true
				});
			};
		};
	};
});
Показать все комментарии