摘自 http://blog.csdn.net/the_fire/article/category/1076350
现在最后来从头开始做一个完整的实例,来体验一把backbone在开发过程中的使用。
这个实战项目我把它叫做webchat(web在线聊天室),使用技术就是backbone+django+sqlite。在功能方面没有想的特别复杂,因为项目的目的就是让大家能够快速的用上backbone。(不过经过前面的文章,我想应该已经能让你用上backbone了)
大概说下这个聊天室的功能,很简单,不用注册登录:
- 1、查看所有聊天记录
- 2、说话
页面也很简单
我们可以概括出需要的实体类,模型如下:
id #主键
content #消息
username #昵称
date #消息发送时间
这样的一个模型基本上已经满足了功能上的需求了。
再由上一篇中的那个页面设计,我们也进行了实现,代码就不解释了。
先是html:
- <!DOCTYPE html>
- <html>
- <head>
- <title>the5fire-WebChat</title>
- <link href="/site_media/chat/css/chat.css" media="all" rel="stylesheet" type="text/css"/>
- <script src="/site_media/chat/js/jquery-1.7.1.js"></script>
- <script src="/site_media/chat/js/underscore-1.3.1.js"></script>
- <script src="/site_media/chat/js/backbone.js"></script>
- <script src="/site_media/chat/js/chat.js"></script>
- </head>
- <body>
- <div class="wrap">
- <div class="main">
- <div class="head">
- <span>欢迎光临the5fire聊天室,当前时间:<label id="nowdate"></label></span>
- </div>
- <div class="screen">
- <ul class="chat_list">
- <li><div class="msgtitle">the5fire 2012-04-10 23:16:00</div><p>大家好!</p></li>
- <li><div class="msgtitle">other 2012-04-10 23:16:00</div><p>你好</p></li>
- </ul>
- </div>
- <div class="send_message">
- <div class="message">
- <textarea id="content" rows="4"></textarea>
- </div>
- <div class="opt">
- <label for="nickname">昵称:</label><input name="nickname" id="nickname"/><br/>
- <button id="send">发送消息</button>
- </div>
- </div>
- </div>
- </div>
- </body>
- <script>
- function show_time()
- {
- var today,hour,second,minute,year,month,date,time;
- today=new Date();
- year = today.getFullYear();
- month = today.getMonth()+1;
- date = today.getDate();
- hour = today.getHours();
- minute =today.getMinutes();
- second = today.getSeconds();
- if(minute < 10) minute = '0' + minute;
- if(second < 10) second = '0' + second;
- time = year + "-" + month + "-" + date +" " + hour + ":" + minute + ":" + second;
- $("#nowdate").html(time);
- }
- setInterval(show_time,1000);
- </script>
- </html>
<!DOCTYPE html> <html> <head> <title>the5fire-WebChat</title> <link href="/site_media/chat/css/chat.css" media="all" rel="stylesheet" type="text/css"/> <script src="/site_media/chat/js/jquery-1.7.1.js"></script> <script src="/site_media/chat/js/underscore-1.3.1.js"></script> <script src="/site_media/chat/js/backbone.js"></script> <script src="/site_media/chat/js/chat.js"></script> </head> <body> <div class="wrap"> <div class="main"> <div class="head"> <span>欢迎光临the5fire聊天室,当前时间:<label id="nowdate"></label></span> </div> <div class="screen"> <ul class="chat_list"> <li><div class="msgtitle">the5fire 2012-04-10 23:16:00</div><p>大家好!</p></li> <li><div class="msgtitle">other 2012-04-10 23:16:00</div><p>你好</p></li> </ul> </div> <div class="send_message"> <div class="message"> <textarea id="content" rows="4"></textarea> </div> <div class="opt"> <label for="nickname">昵称:</label><input name="nickname" id="nickname"/><br/> <button id="send">发送消息</button> </div> </div> </div> </div> </body> <script> function show_time() { var today,hour,second,minute,year,month,date,time; today=new Date(); year = today.getFullYear(); month = today.getMonth()+1; date = today.getDate(); hour = today.getHours(); minute =today.getMinutes(); second = today.getSeconds(); if(minute < 10) minute = '0' + minute; if(second < 10) second = '0' + second; time = year + "-" + month + "-" + date +" " + hour + ":" + minute + ":" + second; $("#nowdate").html(time); } setInterval(show_time,1000); </script> </html>
然后在是CSS代码:
author:the5fire
blog:http://www.the5fire.net
date:2012-04-09
*/
html {
margin:0;
padding:0;
}
body {
margin:0;
font-size:14px;
}
.wrap {
background-color: #B26F4C;
width: 100%;
height: 800px;
}
.main {
width: 50%;
margin: auto;
height: 700px;
background-color: #fff;
}
.head {
height: 40px;
padding-top: 10px;
border-bottom: 1px solid #000;
font-size:20px;
}
.head span{
margin: auto;
width: auto;
}
.screen {
height:400px;
width:auto;
overflow-y: scroll;
background:#CCCCCC;
border: 2px solid #000;
}
.screen .msgtitle {
color:blue;
}
.send_message {
margin-top: 5px;
}
.send_message .message {
width:60%;
float:left;
}
.send_message .message textarea {
width:100%;
}
.send_message .opt {
margin-right:10px;
margin-top:10px;
float:right;
}
来看下界面:
界面设计和模型都有了,那么后台应该有哪些接口呢?
从功能上看也是很简单,只有两个:
- 1、说话(say),在此方法中,讲用户输入的内容保存到数据库。
- 2、获取所有聊天记录(getChatLog),将数据库的内容全部提取出来。
有了前面功能介绍以及整体详细设计 ,下面的开发就变得更有目的性了。
沿着上一篇文章的思路,我们先来把javascript模板建立起来,模板用来取代上一篇中html代码里的:
<div class="msgtitle">the5fire 2012-04-10 23:16:00</div>
<p>大家好!</p>
</li>
把它改成模板为:
<div class="msgtitle">
<%=username %> <%=date %><a id="destroy">删除</a>
</div>
<p><%=content %></p>
</script>
其实模板的作用就是复用,里面多了一个删除的连接,主要是为了演示backbone的DELETE操作。
模板建立很容易,下面来建立页面端的实体类,这个更容易,因为上篇文章已经分析好了:
urlRoot:'',
defualts: {
content:'',
username:'',
date:''
},
clear: function(){
this.destroy();
}
});
没有看到我上一篇插曲文章的同学可能觉得奇怪,为什么urlRoot为空?这里再次重复一下,当model和collection一起使用的时候,或者更确切的说是一个model属于某一个collection时,collection的url将取代mode的urlRoot,但是你的urlRoot还必须存在。
顺着思路,在来看collection,其实简单的很,因为我这里的collection没有太多的动作要做:
url:'/chat/',
model:Chat
});
仅此而已,是不是很简单。
然后同以前我们分析的todos一样,我们也来建立一个管理单个chat界面的类,学以致用,就是模仿–使用–发挥:
tagName:'li',
template:_.template($('#item-template').html()),
events:{
'click #destroy' : 'clear'
},
initialize:function(){
_.bindAll(this,'render','remove');
this.model.bind('change', this.render);
this.model.bind('destroy', this.remove);
},
render: function(){
$(this.el).html(this.template(this.model.toJSON()));
return this;
},
clear: function(){
this.model.clear();
}
});
代码不肖多说。
然后对应着,也要有一个整体的管理view:
el:$('.main'),
events: {
"click #send": "say"
},
initialize: function() {
_.bindAll(this,'addOne','addAll');
this.nickname = this.$('#nickname');
this.textarea = this.$("#content");
chatList.bind('add', this.addOne);
chatList.bind('reset', this.addAll);
chatList.fetch();
setInterval(function() {
chatList.fetch({add: true});
}, 5000);
},
addOne: function(chat) {
//页面所有的数据都来源于server端,如果不是server端的数据,不应添加到页面上
if(!chat.isNew()) {
var view = new ChatView({model:chat});
this.$(".chat_list").append(view.render().el);
$('#screen').scrollTop($(".chat_list").height() + 200);
}
},
addAll: function() {
chatList.each(this.addOne);
},
say: function(event) {
chatList.create(this.newAttributes());
//为了满足IE和FF以及chrome
this.textarea.text('');
this.textarea.val('');
this.textarea.html('');
},
newAttributes: function() {
var content = this.textarea.val();
if (content == '') {
content = this.textarea.text();
}
return {
content: content,
username: this.nickname.val(),
date: get_time()
};
}
});
其中有两个地方需要注意:
- 1、 $(‘#screen’).scrollTop($(“.chat_list”).height() + 200); 这个是为了让那个显示聊天信息的窗口滚动条始终处于最下方。
-
2、
setInterval(function() {chatList.fetch({add: true});
}, 5000);
这个的意思就是,每隔5秒就到到服务器取一下数据,里面的add:true参数表示,每次取回数据之后都在原有数据上累加。
剩下需要说的就是,不用忘了初始化AppView,以及在ChatView定义的上方,实例化ChatList:
//ChatView定义上方
var appView = new AppView;
到这里web端的代码就构建完毕了,从上面的实现可以发现,web端和server端的交互全部通过collection中定义的url:’/chat/’来完成的。所有的CRUD操作通过POST,GET,PUT,DELETE来完成。
相关推荐
backbone.js提供了一套web开发的框架,为复杂javascript应用程序提供一个mvc结构。, 《backbone.js应用程序开发》详细介绍了如何使用backbone.js完成web应用开发。全书从了解mvc、spa和backbone.js的基本知识开始,...
backbone.js提供了一套web开发的框架,为复杂javascript应用程序提供一个mvc结构。, 《backbone.js应用程序开发》详细介绍了如何使用backbone.js完成web应用开发。全书从了解mvc、spa和backbone.js的基本知识开始,...
Backbone.js提供了一套Web开发的框架,为复杂的JavaScript应用程序提供了一个MVC结构。 《Backbone.js应用程序开发》详细介绍了如何使用Backbone.js完成Web应用开发。全书从了解MVC、SPA和Backbone.js的基本知识...
Backbone.js实战.zip 电子书 高清的
《Backbone.js实战》(陶国荣)源码
Backbone.js开发秘笈的官方源码
网络应用程序开发包 include jquery-1.10.2 underscore 1.6.0 backbone 1.1.2 To be continued include Some jquery plugin更新数据 2014-12-25 21:43:58 test up package2015-01-08 00:20:05 grunt-contrib-uglify ...
Backbone 为复杂Javascript应用程序提供模型(models)、集合(collections)、视图(views)的结构。其中模型用于绑定键值数据和自定义事件;集合附有可枚举函数的丰富API; 视图可以声明事件处理函数,并通过RESTful ...
---------------- backbone开发经典 336页清晰完整版pdf-------------- 内容简介 · · · · · · backbone.js提供了一套web开发的框架,为复杂javascript应用程序提供一个mvc结构。 《backbone.js应用程序开发》...
基于YOLOV5【更换backbone为MobileNet】对大型海上目标检测数据集的目标检测实战项目,包含代码、数据集、训练好的权重参数,经测试,代码可以直接使用 【数据集介绍】海上目标图像数据,类别:邮轮、小鸟、鱼、...
[奥莱理] Backbone.js 应用程序开发 (英文版) [奥莱理] Developing Backbone.js Applications (E-Book) ☆ 出版信息:☆ [作者信息] Addy Osmani [出版机构] 奥莱理 [出版日期] 2013年05月29日 [图书页数] 374...
主干.js Shim 存储库。 包管理器 : components-backbone : components/backbone
骨干基础用于开发主干 javascript 的存储库。另一个标题占位符[Backbonejs 网站] ( )
骨干调试器Chrome开发人员工具扩展程序,用于调试Backbone.js应用程序。产品特点在Chrome开发者工具下添加一个面板,该面板可实时显示所有应用程序视图,模型,集合和路由器。 显示的数据包括: 视图:呈现状态,...
本书系统地介绍了应用Backbone.js开发Web应用应该掌握的知识,对其背后的实现原理进行了抽丝剥茧式的分析,并且还涵盖了一些时下非常流行的技术,例如REST、HTML 5以及移动应用开发等。 PDF,2.9M,英文版 Backbone....
这个 Yeoman 生成器提供了一些使用基于 Browserify 和 Handlebars 的 Backbone 项目的快捷方式。 安装 $ npm install -g generator-backbone-browserify 搭建一个新项目 $ mkdir new_dir && cd new_dir $ yo ...
骨干颜色网络开发班学生示例
require+backbone结合开发的例子