Backbone 和 Undersocre 是紧密结合到一块儿的,所以,我们可以在 Backbone 的集合里面, 去使用 Underscore 提供的方法去处理集合里面的项目。比如为集合里面的每一个项目去应用一个函数,按指定的条件过滤一下,找出包含特定属性的项目等等。
下面,我们可以到应用的任务的集合里面,去添加两个方法,用它们来得到完成的还有未完成的任务。
在 js 这个目录下面,找到 Collections ... 打开 TodoCollection.js ... 在这个文件里定义就是跟任务模块相关的集合 ...
在这里,先去定义一个可以得到所有的完成状态的任务 ...
这个方法可以叫做 getCompleted ... 它做的事,就是去返回找出来的状态是完成的任务 .. 先用一个 return ... 然后使用 this.filter ... this 表示当前的这个集合,也就是包含任务项目的这个集合 ...
filter 是在 Underscore 这个类库里面提供的一个方法 ... 它的作用就是可以筛选出列表里面的指定的条件是真的项目 ...
给这个 filter 方法一个函数 ... 在这个函数里面,可以返回要过滤的条件 ... 这个函数可以接受一个参数 ... 这个参数就是表示列表里面的单个项目用的 ... 我们可以用 todo ,来表示在集合里面的单个的任务项目 ..
然后在这个函数的里面,去返回一个条件 ... 先用一个 return ... 然后是 todo.get('completed') .. 使用模型的 get 方法,得到模型里面的 completed 这个属性的值 ...
这样过滤出来的就是在集合里面的,所有的 completed 属性的值是 true 的项目 ... 也就是,状态是完成的任务项目 ...
getCompleted: function() {
return this.filter(function(todo) {
return todo.get('completed') === true;
});
},
下面,我们需要再去定义一个可以得到没有完成的任务的方法 ... 这个方法可以叫做 getRemaining ..
在这个方法里面,我们同样可以使用 Underscore 的 filter 方法,过滤出模型的 completed 是 flase ,也就是未完成的任务项目。使用这个集合的 filter 方法 ... 把一个函数交给这个方法 ... 在这个函数里面,用 todo 表示集合里面的单个的项目 .. 再返回模型的 completed 属性的值是 flase 的项目 ..
getRemaining: function() {
return this.filter(function(todo) {
return todo.get('completed') === false;
});
}
保存一下 ... 下面,我们去浏览器里预览一下 ...
刷新 ... 打开控制台 ... 先试一下集合里的 getCompleted 这个方法 ...
app.todoList.getCompleted()
这里给我们返回来 x 个项目 ... 打开看一下 ... 打开 attributes 这个属性 ... 你会发现 ... 所以返回来的任务项目的 completed 这个属性的值 ... 都会是 true ...
再去试一下 ... getRemaining 这个方法 ...
app.todoList.getRemaining() ...
同样也会给我们返回几个项目 ... 找到这些项目的 attributes 属性 ...
在这里,你会看到,这些项目的 completed 这个属性的值,都是 false ...