Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 15.06.2015, 00:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Если есть время, почему бы не потратить его, ведь все равно на что-то да будет потрачено.

Нет в моих словах никакой высокой материи, и даже намеков нет на конкретно JS или РНР, тут сугубо "политические мотивы" - речь о электорате. Чем привлечь, как не растерять, а "истинная политическая платформа", это уже вторично.
Ответить с цитированием
  #12 (permalink)  
Старый 15.06.2015, 10:10
Аватар для armidoll
Кандидат Javascript-наук
Отправить личное сообщение для armidoll Посмотреть профиль Найти все сообщения от armidoll
 
Регистрация: 28.05.2015
Сообщений: 116

В итоге с фильтрами пришел к написании двух функций 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).

Последний раз редактировалось armidoll, 15.06.2015 в 10:44.
Ответить с цитированием
  #13 (permalink)  
Старый 15.06.2015, 13:17
Аватар для armidoll
Кандидат Javascript-наук
Отправить личное сообщение для armidoll Посмотреть профиль Найти все сообщения от armidoll
 
Регистрация: 28.05.2015
Сообщений: 116

удалено

Последний раз редактировалось armidoll, 15.06.2015 в 13:25.
Ответить с цитированием
  #14 (permalink)  
Старый 19.08.2015, 22:50
Аватар для armidoll
Кандидат Javascript-наук
Отправить личное сообщение для armidoll Посмотреть профиль Найти все сообщения от armidoll
 
Регистрация: 28.05.2015
Сообщений: 116

Как поручить 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);		
}

Последний раз редактировалось armidoll, 19.08.2015 в 23:23. Причина: Нашел вариант
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск