Фильтр Angularjs всегда возвращает true

Я сделал фильтр для ng-repaet, который выглядит так:

  $scope.filterRoutine = function(col) {
        return _.isEqual(col.Routine.IsIndoor, true);
}

Он отлично работает (isEqual возвращает true или false).

Но это не работает, и я не знаю, почему это так (когда я говорю, что это не работает, я не получаю никаких ошибок, но вид не меняется)

 $scope.filterRoutine = function(col) {
         return _.forEach(tempData, function (temp) {
                    if (_.find(col.Exercises, { Exercise: temp })) {
                        return true;                          
                    } else {
                        return false;
                    }
            });
}

Что я здесь делаю (точнее, что я хочу сделать): у меня есть коллекция tempData, и если в моем col.Exercises есть хотя бы один элемент из tempData, он должен отображаться в представлении. Но по какой-то причине все элементы отображаются в представлении, т.е. ничего не фильтруется.

Я предполагаю, что это потому, что эта функция всегда возвращает true (поскольку всегда хотя бы один col.Exercises должен содержать элемент из tempData).

Как я могу это исправить, т.е. скрыть все столбцы, которые не содержат элементов из tempData ?


person hyperN    schedule 15.09.2013    source источник


Ответы (1)


Возврат из _.forEach не делает того, что вы ожидаете. Вам нужно будет сделать что-то вроде этого:

$scope.filterRoutine = function(col) {
     var x = false;

     _.forEach(tempData, function (temp) {
                if (_.find(col.Exercises, { Exercise: temp })) {
                    x = true;                          
                }
        });

     return x

}

Кроме того, «обратные вызовы могут выйти из итерации раньше, явно возвращая false», что означает, что ваш return false останавливал итерацию после того, как _.find в первый раз вернул false.

person Sergiu Paraschiv    schedule 15.09.2013