backbone学习时练习的简单示例

现在js MVC模式大行其道,像backbone,angularjs都是一个好的jsMVC框架。在学习backbone时,看了一下todo示例,写了一个简单的增删改查的示例,其中用到bootstrap做界面。练习一下!

列表页面

新增或修改页面

 1 <!DOCTYPE html>
 2 <html lang="zh-CN">
 3   <head>
 4     <meta charset="utf-8">
 5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6     <meta name="viewport" content="width=device-width, initial-scale=1">
 7     <title>Bootstrap 101 Template</title>
 8     <link href="css/bootstrap.min.css" rel="stylesheet">
 9     <style type="text/css">
10       body{padding:10px;}
11     </style>
12   </head>
13   <body>
14     <!-- Single button -->
15     <div class="page-header">
16       <h1>Backbone <small>Study</small></h1>
17     </div>
18     <div id="page-body">
19
20     </div>
21     <script type="text/html" id="divContactEdit">
22       <div class="panel panel-default">
23         <div class="panel-heading">
24           <h3 class="panel-title">Contact List</h3>
25         </div>
26         <div class="panel-body">
27           <form>
28             <div class="form-group">
29               <label for="txtFirstName">FirstName</label>
30               <input type="text" class="form-control" value="<%=model.get("firstName")%>" id="txtFirstName" placeholder="FirstName"/>
31               <input type="hidden" value="<%=model.cid%>" id="hdIdentity" />
32             </div>
33             <div class="form-group">
34               <label for="txtLastName">LastName</label>
35               <input type="text" class="form-control" value="<%=model.get("lastName")%>" id="txtLastName" placeholder="LastName" />
36             </div>
37             <div class="form-group">
38               <label for="txtEmail">Email address</label>
39               <input type="email" class="form-control" value="<%=model.get("email")%>" id="txtEmail" placeholder="Email">
40             </div>
41             <button type="button" class="btn btn-default" id="btnSubmit">Submit</button>
42             <button type="button" class="btn btn-default" id="btnBack">Back</button>
43           </form>
44         </div>
45       </div>
46     </script>
47     <script type="text/html" id="divContactList">
48       <div class="panel panel-default">
49         <div class="panel-heading">
50           <h3 class="panel-title">Contact List</h3>
51         </div>
52         <div class="panel-body">
53           <table class="table table table-hover">
54             <tr>
55               <th>First Name</th>
56               <th>Last Name</th>
57               <th>Email</th>
58               <th>Oper</th>
59             </tr>
60             <% for(var i=0;i<contactList.models.length;i++){%>
61               <% if(contactList.models[i].get("firstName")!=undefined&&contactList.models[i].get("firstName")!=""){%>
62             <tr>
63               <td><%=contactList.models[i].get("firstName") %></td>
64               <td><%=contactList.models[i].get("lastName") %></td>
65               <td><%=contactList.models[i].get("email") %></td>
66               <td><a href="#post/<%=contactList.models[i].cid %>">Edit</a>
67                 <a href="#del/<%=contactList.models[i].cid %>">Deleted</a>
68               </td>
69             </tr>
70              <%}%>
71             <% } %>
72           </table>
73           <div class="btn-group" role="group" aria-label="..." style="float:right">
74             <button type="button" class="btn btn-default" id="btnAdd">Add</button>
75           </div>
76         </div>
77       </div>
78     </script>
79     <script src="js/jquery.js"></script>
80     <!--<script src="js/bootstrap.min.js"></script>-->
81     <script type="text/javascript" src="js/underscore.js"></script>
82       <script type="text/javascript" src="js/backbone.js"></script>
83     <script src="js/application.js" type="text/javascript"></script>
84   </body>
85 </html>
  1 (function($){
  2   //创建Model类型
  3   var Contact=Backbone.Model.extend({
  4     idAttribute: "_id",
  5     initialize:function(){
  6       //绑定invalid方法
  7       this.bind("invalid",function(model,error){
  8         alert(error);
  9       });
 10     },
 11     //设置默认值
 12     defaults:{
 13       firstName:"wu",
 14       lastName:"ming",
 15       email:""
 16     },
 17     //设置默认值,可以调用model.isValid()方法进行验证
 18     validate: function(attrs, options) {
 19       if (attrs.firstName == "") {
 20         return "firstName不能为空!";
 21       }
 22       if (attrs.lastName == "") {
 23         return "lastName不能为空!";
 24       }
 25       if (attrs.email == "") {
 26         return "email不能为空!";
 27       };
 28     }
 29   });
 30   //创建以ocntact的集合类型
 31   var Contacts=Backbone.Collection.extend({
 32     model:Contact,
 33     initialize:function(){
 34
 35     }
 36   });
 37   //页面列表视图
 38   var ContactListView=Backbone.View.extend({
 39     el:"#page-body",
 40     render:function(context){
 41       var template=_.template($("#divContactList").html());
 42       $(this.el).html(template(context));
 43     },events: {
 44       ‘click #btnAdd‘: ‘goToEdit‘
 45     },goToEdit:function(){
 46       app_router.navigate("add", {trigger:true,replace:true});
 47     }
 48   });
 49   //编辑视图
 50   var ContactEditView=Backbone.View.extend({
 51     el:"#page-body",
 52     render:function(context){
 53       var template=_.template($("#divContactEdit").html());
 54       $(this.el).html(template(context));
 55     },events: {
 56       ‘click #btnBack‘: ‘backToIndex‘,
 57       ‘click #btnSubmit‘: ‘submit‘
 58     },backToIndex:function(){
 59       app_router.navigate("", {trigger:true,replace:true});
 60     },submit:function(){
 61
 62       var firstName=$("#txtFirstName").val();
 63       var lastName=$("#txtLastName").val();
 64       var email=$("#txtEmail").val();
 65
 66       var hdId=$("#hdIdentity").val();
 67       var model=new Contact();
 68       if(firstName=="")return;
 69       model.set({firstName:firstName,lastName:lastName,email:email});
 70       //model.validate();
 71       //模型验证
 72       if(model.isValid()){
 73         var model1=contactList.get(hdId);
 74         //是否找到这个模型,存在则个性,否则新增
 75         if(model1!=undefined){
 76           //修改模型
 77           for(var i=0;i<contactList.models.length;i++){
 78             if(contactList.models[i].cid==hdId){
 79               contactList.models[i].set({firstName:model.get("firstName"),lastName:model.get("lastName"),email:model.get("email")});
 80               break;
 81             }
 82           }
 83         }else{
 84           contactList.add(model);
 85         }
 86         //自动跳转到首页
 87         app_router.navigate("", {trigger:true,replace:true});
 88       }
 89     }
 90   });
 91   //创建路由
 92   var AppRouter=Backbone.Router.extend({
 93     routes:{
 94         "post/:id":"edit",//修改方法
 95         "del/:id":"del",//删除路由
 96         "add":"add",//添加路由
 97         ‘‘: ‘defaultRoute‘,//默认
 98         "*actions":"defaultRoute"
 99     },
100     defaultRoute:function(actions){
101       var listView=new ContactListView();
102
103       listView.render(contactList);
104     },
105     del:function(id){
106       var model=this.getContact(id);
107       contactList.remove(model);
108       app_router.navigate("", {trigger:true,replace:true});
109     },
110     edit:function(id){
111       //alert("edit");
112       var model=this.getContact(id);
113       //alert(model);
114       var editView=new ContactEditView();
115       editView.render({model:model});
116     },
117     add:function(actions){
118       //alert(actions);
119       var model=new Contact();
120       var editView=new ContactEditView();
121       editView.render({model:model});
122     },
123     getContact: function(id) {
124       return contactList.get(id);
125     }
126   });
127   /*程序开始时新增三个模型*/
128   var contact1=new Contact();
129   var contact2=new Contact();
130   var contact3=new Contact();
131   contact1.set({firstName:"xiao",lastName:"ming",email:"[email protected]"});
132   contact2.set({firstName:"xiao",lastName:"hua",email:"[email protected]"});
133   contact3.set({firstName:"xiao",lastName:"x",email:"[email protected]"});
134   //添加到Collection中
135   var contactList = new Contacts();
136   contactList.add(contact1);
137   contactList.add(contact2);
138   contactList.add(contact3);
139   //赋值给全局变量以供调用
140   window.contactList=contactList;
141   //创建路由,全局启动
142   var app_router=new AppRouter;
143   window.app_router=app_router;
144   Backbone.history.start();
145
146 })(jQuery);

附源码:

时间: 2024-11-05 04:57:54

backbone学习时练习的简单示例的相关文章

OpenGL学习笔记 之三 (简单示例 太阳月亮地球)

#include<glut.h> // 太阳.地球和月亮 // 假设每个月都是30天 // 一年12个月,共是360天 static int day = 150;//day的变化:从0到359 void myDisplay(void) { glDepthFunc(GL_LEQUAL);//设置深度<=通过,与物体之间的前后有关 glEnable(GL_DEPTH_TEST);//深度检测 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

Backbone简单示例

要的资源: <script type="text/javascript" src="../dep/underscore-1.6.0.min.js"></script> <script type="text/javascript" src="../dep/jquery-1.11.1.min.js"></script> <script type="text/javas

RPC学习----Thrift快速入门和Java简单示例

一.什么是RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. 二.什么是Thrift? thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和

ActiveMQ学习教程(二)——简单示例

ActiveMQ学习教程(二)--简单示例 一.应用IDEA构建Maven项目 File->New->Module...->Maven->勾选->选择->Next -> GroupId:com.jd.myMaven   |    ArtifactId:activeMQ    |    version:默认   ->Finish 项目构建成功!项目结构如下所示: 二.创建生产者类,模拟生产者发消息 Step1:java/activemq/JMSProducer

动态网站开发技术学习2:VS 2010制作作第一个简单示例网站

制作一个简单示例网站的步骤: 一,启动VS 2010开发环境,选择菜单中的"文件",选择其中的"新建",再选择"网站",会弹出"新建网站"对话框. 二,在"新建网站"的对话框,在"已安装模板"中选择Visual C#,右侧的选择"ASP.NET网站"选项,单击"新建网 站"中的"文件系统",下拉菜单中有"文件系统&qu

【opengl 学习笔记01】HelloWorld示例

<<OpenGL Programming Guide>>这本书是看了忘,忘了又看,赶脚还是把笔记做一做心里比较踏实,哈哈. 我的主题是,好记性不如烂笔头. ================================================================ 1. 下载glut库 glut库地址为:www.opengl.org/resources/libraries/glut/glutdlls37beta.zip glut全称为:OpenGL Utilit

关于Ajax实现的简单示例

一.代码示例 关于Ajax的基本概念(包括XMLHttpRequest对象及其相关方法属性)移步这里(w3school中文版)学习了解. <!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>使用Ajax异步加载数据</title> <script type = "text/javasc

Android通过startService播放背景音乐简单示例

关于startService的基本使用概述及其生命周期可参见博客<Android中startService的使用及Service生命周期>. 本文通过播放背景音乐的简单示例,演示startService的基本使用流程. 系统界面如下: 界面上面就两个按钮,"播放音乐并退出Activity" 和 "停止播放音乐".我们在该示例中,通过操纵Activity的按钮控制MusicService播放或停止播放音乐. 我将一个名为music.mp3的放到资源目录/r

xcode江湖录-第04章 风水宝地--界面生成器之StoryBoard简单示例 与 约束

第04章风水宝地--界面生成器之StoryBoard简单示例 ??如何设置转场动画?? ??如何在参与到转场动作中?? ??如何让页面跳转到自定义VC?? ??如何设置自定义跳转模式?? ??如何用StoryBoard中的VC生成对象?? 01:新建SingleViewApplication,命名为StoryBoardTest. 02:打开Main.Storyboard,如下: 03:通过Object Library选中View Controller(A controller that mana