Добрый час суток. Когда на секции задаются фильтры - то соответственно появляется запись в таблице SysProfileData и при переходах по разделам и т.д. после захода вновь на эту секцию фильтры остаются - всё ок. Нужно реализовать "сохранение" фильтров на детали,чтобы при переходах они соответственно не терялись,а сохранялись. Переопределил setFilter и переписал метод saveFilter для BaseGridDetailV2. Запись теперь появляется в SysProfileData(когда ставишь фильтры на детали,до этого не появлялась). И поле Key = Имеет структуру [Имя_страницы][Имя_детали]+"Filters". Как следствие - фильтры все так же не появляются. Правильно ли формируется для этого Key? или нужно другой шаблон/способ? Может не только 1 запись должа вставляться в таблицу а какая то вспомогательная?
Переписанное на BaseGridDetailV2 имеет вид:
methods: {
setFilter: function(key, value, filtersValue) {
var filters = this.get("DetailFilters");
if (key) {
if (filters.find(key)) {
filters.remove(filters.get(key));
}
filters.add(key, value);
//
this.saveFilter(key, filtersValue, value);
//
} else if (value) {
value.each(function(filter) {
this.setFilter(filter.key, filter);
}, this);
}
},
saveFilter: function(filterKey, filterValue, filter) {
if (!filterValue) {
return;
}
var sessionFilters = this.getSessionFilters();
var profileFilters = this.getProfileFilters();
var serializableFilter = this.getSerializableFilter(filter);
switch (filterKey) {
case "CustomFilters":
Terrasoft.each(filterValue, function(item) {
var f = item.filter = item.value || "";
var isSerializedFilter = (typeof f === "string" && f.indexOf("[") >= 0 && f.indexOf("]") >= 0 &&
f.indexOf("{") >= 0 && f.indexOf("}") >= 0);
if (!isSerializedFilter) {
item.filter = Terrasoft.encode(serializableFilter);
}
});
if (this.isNotEmpty(filterValue)) {
sessionFilters[filterKey] = profileFilters[filterKey] = filterValue;
} else {
delete sessionFilters.CustomFilters;
delete profileFilters.CustomFilters;
}
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
case "FolderFilters":
sessionFilters[filterKey] = profileFilters[filterKey] = filterValue;
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
case "FixedFilters":
filterValue.filter = Terrasoft.encode(serializableFilter);
profileFilters[filterKey] = {Fixed: filterValue};
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
case "TagFilters":
serializableFilter.tags = filterValue;
profileFilters[filterKey] = [serializableFilter];
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
default:
sessionFilters[filterKey] = profileFilters[filterKey] = [
{
filter: filter.serialize()
}
];
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
}
},
getSessionFilters: function() {
var storage = Terrasoft.configuration.Storage.Filters = Terrasoft.configuration.Storage.Filters || {};
var sessionFilters = storage[this.name] = storage[this.name] || {};
return sessionFilters;
},
getProfileFilters: function() {
return this.get("ProfileFilters") || {};
},
getSerializableFilter: function(filter) {
filter.serializationInfo = {serializeFilterManagerInfo: true};
var serializableFilter = {};
filter.getSerializableObject(serializableFilter, filter.serializationInfo);
return serializableFilter;
},
getFiltersKey: function() {
var schemaName = this.name;
var cardName = this.values.CardPageName;
return cardName + schemaName + "Filters";
}
},