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

Backbone实现简单的ListView

阅读更多

准备用Backbone实现一个简单的ListView,有的功能:

1.页面用模版渲染一个json数组数据(没有去请求数据库,简单的模拟)

2.绑定每个item,单击可以找到对应的model(该model即对象中包括创建时的所有属性)

 

在这里简单谈谈单页面应用(SPA)和传统的多页面(如JSP)开发的不同之处,多页面中每次得到一个列表,如果单击item去查看详情,一般都要去更具id到数据库再去找该对象,然后再新的页面中展示,其实负责渲染该列表的List中已经有该对象了,再去请求一次服务器是不是很不友好呢?在单页面中就没有这个问题,单击每个Item就可以找到该对象,然后直接渲染数据就可以了,省去了再去请求服务器。在这里只是简单的说说在做项目中的体会~

 

下面看代码吧:

$(function(){
	//创建简单的User类
	var User = Backbone.Model.extend({
	});
	//User的集合
	var UserList = Backbone.Collection.extend({
		model:User
	});
	//增加一些测试数据
	var Users = new UserList;
	Users.add([{'name':'zhangsan'},{'name':'lisi'}]);
	//ListView中的每个Item的视图
	var ItemView = Backbone.View.extend({
		tagName:'li',
		//_.template是Underscore中的方法
		template:_.template($('#itemTmpl').html()),
		// **render** is the core function that your view should override, in order
	    // to populate its element (`this.el`), with the appropriate HTML. The
	    // convention is for **render** to always return `this`.
		render: function() {
			//下面是this.el获得的源码
			/**
			if (!this.el) {
	        	var attrs = this.attributes || {};
	        	if (this.id) attrs.id = this.id;
	        	if (this.className) attrs['class'] = this.className;
	        	this.el = this.make(this.tagName, attrs);
		    }else if (_.isString(this.el)) {
		      this.el = $(this.el).get(0);
		    }
		    **/
			//可以看出this.el是通过make方法动态创建的
			//this.model接收在new的时候传入的user
			$(this.el).html(this.template(this.model.toJSON()));
			return this;//always return this
	    },
		events:{
			"click":"viewDetail"//绑定单击事件
		},
		viewDetail:function(){
			console.log(this.model.toJSON());
			alert('你选择了'+this.model.get('name'));
		}
	});
	//主视图
	var AppView = Backbone.View.extend({
		initialize:function(){
			//绑定一些事件
		},
		addAll:function(){
			//实际开发中是先从服务器load数据,然后再执行下面,因此从服务器load数据应该是
			//在该视图初始化的时候就执行,可以在初始化的时候调用fetch()方法
			Users.each(function(user){
				console.log(user);
				//将user传入ItemView中
				var view = new ItemView({model: user});
			    $('#listView').append(view.render().el);
			});
		}
	});
	//入口
	new AppView().addAll();
});

 代码中都加了注释,很容易理解的。

 

 

3
5
分享到:
评论

相关推荐

    backbone.listview:一个简单的用于骨干网的ListView

    主干列表视图一个简单的ListView for Backbone。 支持Backbone.Collection类的API。 set , reset , add , remove , push , pop , shift , unshift 。 注意:这没有实现Marionette.CollectionView般的行为,但...

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

    在本教程中,我们将探讨如何使用Backbone.js框架创建一个简单的联系人管理应用,特别是关注如何构建联系人的列表展示部分。Backbone.js是一款轻量级的JavaScript库,它为前端开发提供模型-视图-控制器(MVC)架构,...

    Backbone.js框架中简单的View视图编写学习笔记

    在本文中,我们将深入探讨如何在Backbone.js中编写简单的View,并理解其核心概念。 首先,让我们了解`el`属性。`el`(element)是一个特殊的属性,用于指定View所关联的DOM元素。在提供的示例中,`el`被设置为`....

    Day-20:使用 Backbone 重新设计 IMDB API

    Backbone的事件系统使得这种双向数据绑定变得非常简单。 在实现用户交互方面,Backbone.View提供了一系列方法,如events属性,可以方便地定义DOM元素上的事件处理器。例如,我们可以监听列表项的点击事件,然后导航...

    bb-view:项目和列表的 Backbone JS 基本视图

    在"bb-view"项目中,开发者可能已经实现了一个或多个这样的视图,用于展示和交互项目列表。通过学习和理解上述概念,你可以更好地理解和复用该项目中的代码,甚至扩展到更复杂的应用场景。在实践中,结合其他...

    spa:backbone+jqm+requirejs架构的单页应用举例

    9. **SPA中的路由管理:** 如何结合Backbone.js的Router和RequireJS来实现动态导航和页面切换。 10. **性能优化:** 使用RequireJS的优化工具r.js进行代码压缩和合并,提升SPA的加载速度。 通过这个SPA示例,我们...

    photo-app-backbone

    ListView (提供照片标题列表) RatingView (提供下拉视图;接收用户选择并向模型发出事件) 科技栈 前端 BackboneJS 引导程序 已知问题:评分未正确绑定到照片。 仅在收藏级别绑定。 相关项目 在中出相同的应用...

    jquery mobile

    jQuery Mobile 提供了一套主题引擎,允许开发者通过简单的CSS类(如 `.ui-body-a` 或 `.ui-bar-b`)快速改变应用的颜色和样式。主题系统基于Sass(Syntactically Awesome Style Sheets),允许自定义颜色、字体和...

Global site tag (gtag.js) - Google Analytics