Я хочу фильтровать Backbone collection
с использованием метода _.without
.Почему метод «без» возвращает разные результаты в зависимости от контекста?
возвращает правильные результаты (только завершена Todos) в этом виде вызова:
return this.without.apply(this, this.active());
, но не в этом одном:
return _.without(this.models, this.active());
В последнем заявлении он возвращает массив, содержащий ВСЕ модели из коллекция.
Невозможно использовать методы Underscore
напрямую, но только через контекст Backbone's this
?
Как сделать работу 2-го заявления?
todos.js
var app = app || {};
var Todos = Backbone.Collection.extend({
model: app.Todo,
active: function() {
return this.filter(function(todo) {
return todo.get('completed') === false;
});
},
completed: function() {
return this.without.apply(this, this.active());
// return _.without(this.models, this.active()); <--- Problem is here
}
});
app.Todos = new Todos();
ДОБАВЛЕНО ПОЗЖЕ:
С _ .without
метод не принимает массив в качестве второго параметра _.difference
больше подходит для моей задачи.
return _.difference(this.models, this.active());
Но как работает _.without в первом виде вызова, если он ожидает скалярное значение? this.without.apply (this, this.active()) – yaru
> Это плохая практика. Почему так? Это повторное использование кода. Сухой принцип. – yaru
_Почему так? Это повторное использование кода. Не для вашего дела. – hindmost