Добрый день, подскажите как реализовать данную задачу.
В разделе создал пользовательские фильтры Улица, Дом , Квартира. Значения в фильтре Дом зависят от Улицы, а значения в фильтре Квартира от значения Дом.
Если нажимать на "лупу" то фильтрация успешно отрабатывает. Но если вводить значения в поле - фильтр в выпадающем списке не срабатывает.
Как реализовать фильтрацию выпадающего списка в разделе?
Код схемы раздела:
define("VcApartments1Section", ["BaseFiltersGenerateModule", "css!VcMyFilterStyle"],
function(BaseFiltersGenerateModule) {
return {
entitySchemaName: "VcApartments",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"name": "MyFilterGroupContainer",
"parentName": "LeftGridUtilsContainer",
"propertyName": "items",
"index": 0,
"values": {
"id": "MyFilterGroupContainer",
"itemType": this.Terrasoft.ViewItemType.CONTAINER,
"items": []
}
},
{
"operation": "insert",
"name": "MyFilterContainer",
"parentName": "MyFilterGroupContainer",
"propertyName": "items",
"index": 0,
"values": {
"id": "MyFilterContainer",
"itemType": this.Terrasoft.ViewItemType.CONTAINER,
"items": []
}
},
{
"operation": "insert",
"parentName": "MyFilterContainer",
"propertyName": "items",
"name": "VcStreetFilter",
"values": {
"bindTo": "VcStreetFilter",
"caption": "Улица"
}
},
{
"operation": "insert",
"name": "MyFilterContainer2",
"parentName": "MyFilterGroupContainer",
"propertyName": "items",
"index": 1,
"values": {
"id": "MyFilterContainer2",
"itemType": this.Terrasoft.ViewItemType.CONTAINER,
"items": []
}
},
{
"operation": "insert",
"parentName": "MyFilterContainer2",
"propertyName": "items",
"name": "VcHouseFilter",
"values": {
"bindTo": "VcHouseFilter",
"caption": "Дом"
// "controlConfig": {
// "prepareList": {
// "bindTo": "VcHouseFilter"
// }
// // "contentType": Terrasoft.ContentType.ENUM
// }
}
},
{
"operation": "insert",
"name": "MyFilterContainer3",
"parentName": "MyFilterGroupContainer",
"propertyName": "items",
"index": 2,
"values": {
"id": "MyFilterContainer3",
"itemType": this.Terrasoft.ViewItemType.CONTAINER,
"items": []
}
},
{
"operation": "insert",
"parentName": "MyFilterContainer3",
"propertyName": "items",
"name": "VcNameFilter",
"values": {
"bindTo": "VcNameFilter",
"caption": "Квартира"
}
}
]/**SCHEMA_DIFF*/,
attributes: {
"VcStreetFilter": {
"dataValueType": Terrasoft.DataValueType.LOOKUP,
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
isLookup: true,
caption: "VcStreet",
referenceSchemaName: "VcStreet"
},
"VcHouseFilter": {
"dataValueType": Terrasoft.DataValueType.LOOKUP,
"lookupListConfig": {
// Массив фильтров, применяемых к запросу для формирования данных поля-справочника.
"filters": [
function() {
var filterGroup = Ext.create("Terrasoft.FilterGroup");
var VcStreetFilter = this.get("VcStreetFilter");
if (VcStreetFilter && VcStreetFilter.value) {
filterGroup.add("VcStreetFilter",Terrasoft.createColumnFilterWithParameter
(Terrasoft.ComparisonType.EQUAL, "[VcHouses:Id].VcStreet", VcStreetFilter.value));
} else {
filterGroup.removeByKey("VcStreetFilter");
}
return filterGroup;
}
]
},
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
isLookup: true,
caption: "VcHouse",
referenceSchemaName: "VcHouses"
},
"VcNameFilter": {
"dataValueType": Terrasoft.DataValueType.LOOKUP,
"lookupListConfig": {
// Массив фильтров, применяемых к запросу для формирования данных поля-справочника.
"filters": [
function() {
var filterGroup = Ext.create("Terrasoft.FilterGroup");
var VcHouseFilter = this.get("VcHouseFilter");
if (VcHouseFilter && VcHouseFilter.value) {
filterGroup.add("VcHouseFilter",Terrasoft.createColumnFilterWithParameter
(Terrasoft.ComparisonType.EQUAL, "[VcApartments:Id].VcHouse", VcHouseFilter.value));
} else {
filterGroup.removeByKey("VcHouseFilter");
}
return filterGroup;
}
]
},
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
isLookup: true,
caption: "VcName",
referenceSchemaName: "VcApartments"
}
},
mixins: {
LookupQuickAddMixin: "Terrasoft.LookupQuickAddMixin"
},
methods: {
onLookupChange: function(newValue, columnName) {
this.callParent(arguments);
if (columnName === "VcStreetFilter") {
this.set("VcStreetFilter", newValue);
this.onVcStreetFilterChanged();
}
if (columnName === "VcHouseFilter") {
this.set("VcHouseFilter", newValue);
this.onVcHouseFilterChanged();
}
if (columnName === "VcNameFilter") {
this.set("VcNameFilter", newValue);
this.onVcNameFilterChanged();
}
},
// Обновляет грид
onVcStreetFilterChanged: function() {
this.reloadGridData();
},
onVcHouseFilterChanged: function() {
this.reloadGridData();
},
onVcNameFilterChanged: function() {
this.reloadGridData();
},
// Инициализирует фиксированные фильтры
initQueryFilters: function(esq) {
this.callParent(arguments);
// Фильтр по Улице
var VcStreetFilter = this.get("VcStreetFilter");
if (VcStreetFilter && VcStreetFilter.value) {
esq.filters.add("VcStreetFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "[VcApartments:Id].VcStreet", VcStreetFilter.value));
} else {
esq.filters.removeByKey("VcStreetFilter");
}
// Фильтр по Дому
var VcHouseFilter = this.get("VcHouseFilter");
if (VcHouseFilter && VcHouseFilter.value) {
esq.filters.add("VcHouseFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "[VcApartments:Id].VcHouse", VcHouseFilter.value));
} else {
esq.filters.removeByKey("VcHouseFilter");
}
// Фильтр по названию
var VcNameFilter = this.get("VcNameFilter");
if (VcNameFilter && VcNameFilter.value) {
esq.filters.add("VcNameFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "[VcApartments:Id].Id", VcNameFilter.value));
} else {
esq.filters.removeByKey("VcNameFilter");
}
}
}
};
});