`
liudong19870227
  • 浏览: 32279 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Backbone制作联系人管理之过滤和路由(2)

阅读更多

第二部分 添加类型过滤和路由功能

 

 

 

 

 

 

 

 

 

 

 

 

如图这部分我们加入左上角的功能(基于第一部分来做的):

一、创建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);

 

附上源代码

 

分享到:
评论
1 楼 tiankong6622 2012-08-29  
[b][/b][i][/i][u][/u]
[img][/img][url][/url][flash=200,200][/flash]

相关推荐

    Backbone制作联系人管理之列表(1)

    Backbone.js是一款轻量级的JavaScript库,它为前端开发提供模型-视图-控制器(MVC)架构,帮助组织和管理复杂的应用程序结构。 首先,我们需要理解Backbone.js的核心组件: 1. **模型(Model)**:这是数据的容器...

    backbone.routemanager, 更好的backbone.js 项目路由管理.zip

    backbone.routemanager, 更好的backbone.js 项目路由管理 backbone.routemanager由 Tim Branyen @tbranyen 创建。向 Backbone.Router 提供缺少的特性。依赖于下划线,Backbone 和 jQuery 。 你可以使用定制配置完全...

    Java 演示 backbone 基本用法

    1. **Backbone.Model**: 这是Backbone的核心组件之一,用于封装和管理应用的数据。Model负责存储数据,并提供了监听和处理数据变化的方法。开发者可以定义Model的属性和事件,当模型数据发生变化时,可以触发相应的...

    backbone整合require例子

    这种做法类似于Java中的`import`语句,允许明确地声明和管理代码之间的依赖关系,从而避免了全局变量污染和命名冲突。 **标签详解:** 1. **backbone** - Backbone.js 是一个用于构建富客户端应用的JavaScript库,...

    backbone 资料

    这个框架的核心理念是帮助开发者维护数据和界面之间的同步,同时提供了一种组织代码的方式,使得大型应用的管理更为有序。 在Backbone中,Model是数据的容器,它封装了业务逻辑和数据状态。你可以将服务器端的数据...

    BackBone介绍及使用

    3. **View**:视图负责渲染和管理用户界面。视图可以绑定到一个或多个模型,当模型数据变化时,视图会自动更新。Backbone推崇的是“胖模型,瘦视图”,视图不直接操作数据,而是通过事件驱动来更新模型。 4. **...

    backbone 和bootstrap 登录示例项目

    Router是Backbone中处理URL路由的部分,用于根据不同的URL执行相应的操作。在登录示例中,Router可能会有一个专门处理登录请求的路径,如`/login`,当用户点击登录按钮时,Router将触发处理登录逻辑的函数。 3. **...

    backbone文档

    Backbone.js 是一款轻量级的JavaScript库,主要用于构建客户端的Web应用程序,它引入了Model-View-Controller(MVC)的设计模式,帮助开发者更好地组织和管理前端代码。这款库由Jeremy Ashkenas开发,自2010年发布...

    透过源码学前端 之 Backbone 一

    标题“透过源码学前端 之 Backbone 一”暗示我们将从源码的角度去理解Backbone.js的工作原理。通过阅读和分析源码,我们可以更深入地了解其内部机制,这将对提升我们的前端开发技能大有裨益。 首先,Backbone.js的...

    Node应用程序构建——使用MongoDB和Backbone

    在本文中,我们将深入探讨如何使用Node.js构建应用程序,并结合MongoDB数据库以及Backbone.js作为前端框架,实现数据的高效管理和交互。Node.js是基于Chrome V8引擎的JavaScript运行环境,它让JavaScript能够运行在...

    backbone官方Todo示例_修正

    "backbone官方Todo示例_修正"是一个很好的学习资源,它演示了如何使用Backbone.js来构建一个简单的待办事项管理应用。 1. **模型(Model)**:在Backbone中,模型是应用程序数据的核心,通常对应于服务器上的JSON对象...

    Backbone.js实战.zip

    通过阅读这两份PDF文档,开发者不仅可以掌握Backbone.js的基本用法,还能了解到如何在实际项目中有效地组织和管理前端代码,提高开发效率和代码质量。无论是初学者还是有经验的开发者,都能从中受益匪浅,提升自己的...

    backbone实现的一个小demo

    在这个"backbone实现的一个小demo"中,开发者使用Backbone来展示如何在Web应用中有效地组织代码和管理数据流。 1. **Backbone.Model**: Model是Backbone的核心组件之一,它用于封装应用中的数据和业务逻辑。在这个...

    backbone_js_1.1.2

    它通过提供模型(Models)、视图(Views)、集合(Collections)和路由器(Routers)等核心概念,帮助开发者组织和管理Web应用的结构。1.1.2是Backbone.js的一个版本,该版本可能包含了对早期版本的改进、bug修复...

    backbone_api_frame

    Backbone.js是一款轻量级的JavaScript库,它为前端开发者提供了模型层(Model)、视图层(View)和控制器层(Controller)的结构,以帮助组织和管理复杂的JavaScript应用程序。模型(Model)用于处理数据和业务逻辑...

    《Node应用程序构建:使用MongoDB和Backbone》 源码

    7. **Backbone.js的View和Router**:学习如何使用Backbone.js的View来处理用户界面,以及如何用Router来管理页面导航和URL,实现单页应用(SPA)。 8. **实时通信与WebSocket**:Node.js的非阻塞I/O特性使得实现...

    backbone框架

    使用Backbone,开发者可以轻松地组织和管理前端代码,实现与服务器的高效交互。虽然它不包含内置的模板引擎或依赖注入机制,但可以与其他库如Handlebars或RequireJS结合使用,以增强功能和灵活性。 总的来说,...

    backbone.rar

    2. **集合(Collection)**:集合是一组有序的模型实例,提供了对这些模型的操作,如排序、过滤和遍历。集合也有自己的URL,可以像模型一样与服务器同步。 3. **视图(View)**:视图负责处理DOM操作和用户交互。...

    backbone.js underscore.js

    在实际项目中,Backbone.js依赖于Underscore.js,因为Backbone的一些功能如事件系统和模板引擎就构建在Underscore.js之上。同时,jQuery-1.10.2.js作为基础库,提供了DOM操作和Ajax请求的支持,使得开发者可以方便地...

Global site tag (gtag.js) - Google Analytics