第二部分 添加类型过滤和路由功能
如图这部分我们加入左上角的功能(基于第一部分来做的):
一、创建select,并填充数据
1.在index.html中添加标签
<header>
<div id="filter"><label>Show me:</label></div>
</header>
2.添加列表数据
由于这个和联系人视图平级都属于AppView要渲染的内容,所以可以现在AppView的render方法中添加功能代码:
//渲染下拉列表
this.$el.find('#filter').append(this.createSelect());
3.添加createSelect和fetchTypes方法
createSelect: function(){
var select = $('<select><option value="all">All</option></select>');
_.each(this.getTypes(), function(item){
var option = $("<option/>",{
value: item,
text: item
}).appendTo(select);
});
return select;
},
//获得类型数组
getTypes: function(){
return _.uniq(this.collection.pluck('type'));
}
二、过滤实现
1.给select标签绑定chang事件,可以给AppView定义events属性
events: {
'change #filter select': 'setFilter'
}
2.setFilter的定义,创建了filterType属性
setFilter: function(e){
//定义filterType属性
this.filterType = e.currentTarget.value;
this.trigger('change:filterType');
}
3.在AppView初始化时绑定filterType属性
this.on('change:filterType',this.filterByType,this);
4.过滤功能逻辑
filterByType: function(){
if(this.filterType === 'all'){
this.collection.reset(contacts);
}else{
this.collection.reset(contacts , {slient: true});
var filterType = this.filterType,
filtered = _.filter(this.collection.models, function(item){
return item.get('type') == filterType;
});
this.collection.reset(filtered);
}
}
reset方法可以重置集合中的对象,同时也会触发reset事件,当含有{slient:true}时,是不会触发reset事件的,看来我们还需绑定this.collection的reset事件,该事件触发时调用render方法重新渲染。
this.collection.on('reset',this.render,this);
三、路由实现
我们的应用现在也不支持浏览器直接访问某种类型的联系人,也没有后退功能,我们可以利用hash来实现这部分功能。
例如:当访问地址为:http://yoursite.com/#filter/同学,则页面显示同学分类
我们先定义一个路由:
//定义路由
var ContactsRouter = Backbone.Router.extend({
routes: {
'filter/:type': 'urlFilter'
},
urlFilter: function(type){
app.filterType = type;
app.trigger('change:filterType');
}
});
创建路由和启动路由功能
var contactsRouter = new ContactsRouter();
Backbone.history.start();
修改filterByType方法,增加:
contactsRouter.navigate('filter/All');
contactsRouter.navigate('filter/'+filterType);
附上源代码
分享到:
相关推荐
Backbone.js是一款轻量级的JavaScript库,它为前端开发提供模型-视图-控制器(MVC)架构,帮助组织和管理复杂的应用程序结构。 首先,我们需要理解Backbone.js的核心组件: 1. **模型(Model)**:这是数据的容器...
backbone.routemanager, 更好的backbone.js 项目路由管理 backbone.routemanager由 Tim Branyen @tbranyen 创建。向 Backbone.Router 提供缺少的特性。依赖于下划线,Backbone 和 jQuery 。 你可以使用定制配置完全...
1. **Backbone.Model**: 这是Backbone的核心组件之一,用于封装和管理应用的数据。Model负责存储数据,并提供了监听和处理数据变化的方法。开发者可以定义Model的属性和事件,当模型数据发生变化时,可以触发相应的...
这种做法类似于Java中的`import`语句,允许明确地声明和管理代码之间的依赖关系,从而避免了全局变量污染和命名冲突。 **标签详解:** 1. **backbone** - Backbone.js 是一个用于构建富客户端应用的JavaScript库,...
这个框架的核心理念是帮助开发者维护数据和界面之间的同步,同时提供了一种组织代码的方式,使得大型应用的管理更为有序。 在Backbone中,Model是数据的容器,它封装了业务逻辑和数据状态。你可以将服务器端的数据...
3. **View**:视图负责渲染和管理用户界面。视图可以绑定到一个或多个模型,当模型数据变化时,视图会自动更新。Backbone推崇的是“胖模型,瘦视图”,视图不直接操作数据,而是通过事件驱动来更新模型。 4. **...
Router是Backbone中处理URL路由的部分,用于根据不同的URL执行相应的操作。在登录示例中,Router可能会有一个专门处理登录请求的路径,如`/login`,当用户点击登录按钮时,Router将触发处理登录逻辑的函数。 3. **...
Backbone.js 是一款轻量级的JavaScript库,主要用于构建客户端的Web应用程序,它引入了Model-View-Controller(MVC)的设计模式,帮助开发者更好地组织和管理前端代码。这款库由Jeremy Ashkenas开发,自2010年发布...
标题“透过源码学前端 之 Backbone 一”暗示我们将从源码的角度去理解Backbone.js的工作原理。通过阅读和分析源码,我们可以更深入地了解其内部机制,这将对提升我们的前端开发技能大有裨益。 首先,Backbone.js的...
在本文中,我们将深入探讨如何使用Node.js构建应用程序,并结合MongoDB数据库以及Backbone.js作为前端框架,实现数据的高效管理和交互。Node.js是基于Chrome V8引擎的JavaScript运行环境,它让JavaScript能够运行在...
"backbone官方Todo示例_修正"是一个很好的学习资源,它演示了如何使用Backbone.js来构建一个简单的待办事项管理应用。 1. **模型(Model)**:在Backbone中,模型是应用程序数据的核心,通常对应于服务器上的JSON对象...
通过阅读这两份PDF文档,开发者不仅可以掌握Backbone.js的基本用法,还能了解到如何在实际项目中有效地组织和管理前端代码,提高开发效率和代码质量。无论是初学者还是有经验的开发者,都能从中受益匪浅,提升自己的...
在这个"backbone实现的一个小demo"中,开发者使用Backbone来展示如何在Web应用中有效地组织代码和管理数据流。 1. **Backbone.Model**: Model是Backbone的核心组件之一,它用于封装应用中的数据和业务逻辑。在这个...
它通过提供模型(Models)、视图(Views)、集合(Collections)和路由器(Routers)等核心概念,帮助开发者组织和管理Web应用的结构。1.1.2是Backbone.js的一个版本,该版本可能包含了对早期版本的改进、bug修复...
Backbone.js 是一款轻量级的JavaScript库,用于构建客户端的Web应用,它提供了一种组织和管理前端数据模型、视图以及与服务器交互的结构。这个文档将带你走进Backbone的世界,通过一个开发入门的例子,帮助你了解...
Backbone.js是一款轻量级的JavaScript库,它为前端开发者提供了模型层(Model)、视图层(View)和控制器层(Controller)的结构,以帮助组织和管理复杂的JavaScript应用程序。模型(Model)用于处理数据和业务逻辑...
7. **Backbone.js的View和Router**:学习如何使用Backbone.js的View来处理用户界面,以及如何用Router来管理页面导航和URL,实现单页应用(SPA)。 8. **实时通信与WebSocket**:Node.js的非阻塞I/O特性使得实现...
使用Backbone,开发者可以轻松地组织和管理前端代码,实现与服务器的高效交互。虽然它不包含内置的模板引擎或依赖注入机制,但可以与其他库如Handlebars或RequireJS结合使用,以增强功能和灵活性。 总的来说,...
2. **集合(Collection)**:集合是一组有序的模型实例,提供了对这些模型的操作,如排序、过滤和遍历。集合也有自己的URL,可以像模型一样与服务器同步。 3. **视图(View)**:视图负责处理DOM操作和用户交互。...