Добрый день.
Есть задача добавлять в продукт сопряженные продукты (нечто вроде матрицы). При этом есть требование, чтобы при добавлении сопряженных продуктов были доступны все способы фильтрации и поиска - как в разделе Продукты (в том числе, Группы и Каталог). В связи с этим было принято решение создать страницу CrossProductSectionV2, унаследованную от ProductSectionV2. Эта страница открывается при нажатии нужной копки на странице ProductPageV2. Пробовали два подхода к открытию, но оба сопряжены с определенными проблемами.
1. Через this.sandbox.loadModule
addProductsExtended: function() {
/// <summary>Открывает раздел продуктов для выбора и добавления в матрицу.</summary>
var parameters = {
viewModelConfig: {
NrbBaseProduct: this.getBaseProduct()
}
};
var instanceConfig = {
schemaName: "CrossProductSectionV2",
isSchemaConfigInitialized: true,
entitySchemaName: "Product",
useHistoryState: true,
isSeparateMode: true,
isInChain: true
};
var config = {
renderTo: "centerPanel",
id: this.getCrossProductSectionModuleId(),
instanceConfig: instanceConfig,
parameters: parameters,
keepAlive: true
};
this.sandbox.loadModule("SectionModuleV2", config);
},
getCrossProductSectionModuleId: function() {
/// <summary>Формирует идентификатор модуля для добавления продуктов в матрицу.</summary>
return this.sandbox.id + "_CrossProductSectionV2";
},
getBaseProduct: function() {
/// <summary>Вовзращает идентиификатор базового продукта для матрицы.</summary>
var value = this.get("Id") || this.get("PrimaryColumnValue");
var displayValue = this.get(this.primaryDisplayColumnName);
var baseProduct = {
value: value,
displayValue: displayValue
};
return baseProduct;
}
В это случае инициализация базового продукта NrbBaseProduct (к которому привязываем сопряженные) в CrossProductSection происходит без проблем. Но есть ряд проблем с отображением и последующей выгрузкой модуля CrossProductSection.
Немного некорректно отображается содержимое GridUtilsContainer (съедена верхняя часть), также показан какой-то toggle при нажатии на который - чистый лист (хеш при этом сменяется на что-то невразумительное - без имени страницы ProductPageV2)
Ровно то же самое происходит и при нажатии кнопки Закрыть - разве что toggle также исчезает
На кнопку Закрыть в CrossProductSectionV2 повешен простой обработчик
onCloseButtonCustomClick: function() {
/// <summary>Обработчки нажатия на кнопку Закрыть.</summary>
this.sandbox.publish("BackHistoryState");
},
2. Другой способ открытия - через PushHistoryState
addProductsExtended: function() {
/// <summary>Открывает раздел продуктов для выбора и добавления в матрицу.</summary>
var parameters = {
viewModelConfig: {
NrbBaseProduct: this.getBaseProduct()
}
};
var stateObj;
var requestUrl;
var params = this.sandbox.publish("GetHistoryState");
stateObj = {
schemaName: "CrossProductSectionV2",
isSchemaConfigInitialized: true,
entitySchemaName: "Product",
useHistoryState: true,
isSeparateMode: true,
isInChain: true,
parameters: parameters,
id: this.getCrossProductSectionModuleId()
};
requestUrl = "SectionModuleV2/CrossProductSectionV2";
this.sandbox.publish("PushHistoryState", {
hash: requestUrl,
stateObj: stateObj
});
},
В этом случае открытие и отображение, происходит нормально, но есть проблема с инициализацией базового продукта. Похоже, что объект parameters не обрабатывается. Пока использую решение с инициализацией через публикацией сообщения, но этот подход имеется свой недостаток. В частности после обновления страницы по F5 продукт уже не сможет проинициализироваться.
Также Закрытие, в случае если, открывались и закрывались Группы и/или Расширенная фильтрация произойдет только после n-го нажатия на кнопку Закрыть, где n - число раз когда открывали Группы или Расширенную фильтрацию.
Подскажите, пожалуйста как решить проблему - чтобы модуль Кросс-продукт нормально инициализировался, отображался и закрывался?