Если есть время, почему бы не потратить его, ведь все равно на что-то да будет потрачено.
Нет в моих словах никакой высокой материи, и даже намеков нет на конкретно JS или РНР, тут сугубо "политические мотивы" - речь о электорате. Чем привлечь, как не растерять, а "истинная политическая платформа", это уже вторично. ;) |
В итоге с фильтрами пришел к написании двух функций 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). |
удалено
|
Как поручить js самому создать функцию?
Есть форма:
<form id="filter"> ... <input id="area-01" type="checkbox" name="area" value="100">100 ... </form> Есть массив для фильтров var filters = [] Есть обработчик событий, который слушает <form:"filter">. Пусть его часть выглядит так: var firedEl = event.target; var property = firedEl.name; var value = firedEl.value; Нужно чтобы js сгенерировал функцию используя текущие значения переменных property и value. Сама функция хранится в массиве filters[] и для нашего примера должна выглядеть так:
function(el) {
return el["area"] == 100
}
Как будет выглядеть js код, создающий такую функцию? Он должен быть универсальным и работать для любых допустимых значений property и value. Добавлено: Сделал пока так:
Catalog.prototype.addFilter = function(property, value) {
var funcBody = "return el[" + property + "] == " + value + " ;" ;
var func = new Function ("el", funcBody);
this._filters.push(func);
};
А почему не получилось так?:
Catalog.prototype.addFilter = function(property, value) {
function makeFilter(prop, val) {
return function(el) {
return el[prop] == val;
};
}
var func = makeFilter(property, value);
this._filters.push(func);
}
|
| Часовой пояс GMT +3, время: 18:48. |