В итоге с фильтрами пришел к написании двух функций runBeforeShow() и runBeforeHide(). Они используются для проверки можно ли отобразить элемент <div /> (при активации любого фильтра проверяется требуют ли другие фильтры не отображать).
function runBeforeShow (hiddenByData, firedId){
if(hiddenByData.ids[firedId] == true){ // Set fired filter Id to false
hiddenByData.ids[firedId] = false;
hiddenByData.counter--;
if (hiddenByData.counter == 0){ // Check if there was the fired filter only
return true;
} else {
return false;
}
}
}
function runBeforeHide (hiddenByData, firedId){
if (!hiddenByData.ids[firedId] || hiddenByData.ids[firedId] == false) {
hiddenByData.ids[firedId] = true;
hiddenByData.counter++;
}
}
Вызываются, например, стр.06 и 12:
function updateRefersByFloor(firedValue, firedChecked, firedId){
refers.forEach(function(record){
var hiddenByData = record.hiddenBy;
if (firedChecked){
if (record.project.floors == firedValue ){
if(runBeforeShow(hiddenByData, firedId)) {
record.$element.show();
}
}
} else {
if (record.project.floors == firedValue){
runBeforeHide(hiddenByData, firedId);
record.$element.hide();
}
}
});
}
Сейчас у обеих функций два параметра:
1) Список флагов-id фильтров требующих отображать/не отображать элемент
2) Id активированного фильтра, требующего скрыть/отобразить
Список содержится в hiddenBy.ids[] :
refers.push({
project: project,
$element: $div,
hiddenBy: {
ids: [],
counter: 0
}
});
Вопрос:
стоит ли указанные в начале функции сделать методами объекта hiddenBy{} , если всего будет создаваться до сотни таких объектов? Функции меняют только значения свойств объекта hiddenBy{}.
Вроде даже можно будет уменьшить передаваемые им аргументы с двух до одного (только firedID).