backbone学习时练习的简单示例
2015-12-13 20:12
423 查看
现在js MVC模式大行其道,像backbone,angularjs都是一个好的jsMVC框架。在学习backbone时,看了一下todo示例,写了一个简单的增删改查的示例,其中用到bootstrap做界面。练习一下!
列表页面
![](http://images2015.cnblogs.com/blog/651167/201512/651167-20151213195233950-1369242863.png)
新增或修改页面
![](http://images2015.cnblogs.com/blog/651167/201512/651167-20151213195047809-403474329.png)
附源码:
列表页面
![](http://images2015.cnblogs.com/blog/651167/201512/651167-20151213195233950-1369242863.png)
新增或修改页面
![](http://images2015.cnblogs.com/blog/651167/201512/651167-20151213195047809-403474329.png)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Bootstrap 101 Template</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <style type="text/css"> body{padding:10px;} </style> </head> <body> <!-- Single button --> <div class="page-header"> <h1>Backbone <small>Study</small></h1> </div> <div id="page-body"> </div> <script type="text/html" id="divContactEdit"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Contact List</h3> </div> <div class="panel-body"> <form> <div class="form-group"> <label for="txtFirstName">FirstName</label> <input type="text" class="form-control" value="<%=model.get("firstName")%>" id="txtFirstName" placeholder="FirstName"/> <input type="hidden" value="<%=model.cid%>" id="hdIdentity" /> </div> <div class="form-group"> <label for="txtLastName">LastName</label> <input type="text" class="form-control" value="<%=model.get("lastName")%>" id="txtLastName" placeholder="LastName" /> </div> <div class="form-group"> <label for="txtEmail">Email address</label> <input type="email" class="form-control" value="<%=model.get("email")%>" id="txtEmail" placeholder="Email"> </div> <button type="button" class="btn btn-default" id="btnSubmit">Submit</button> <button type="button" class="btn btn-default" id="btnBack">Back</button> </form> </div> </div> </script> <script type="text/html" id="divContactList"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Contact List</h3> </div> <div class="panel-body"> <table class="table table table-hover"> <tr> <th>First Name</th> <th>Last Name</th> <th>Email</th> <th>Oper</th> </tr> <% for(var i=0;i<contactList.models.length;i++){%> <% if(contactList.models[i].get("firstName")!=undefined&&contactList.models[i].get("firstName")!=""){%> <tr> <td><%=contactList.models[i].get("firstName") %></td> <td><%=contactList.models[i].get("lastName") %></td> <td><%=contactList.models[i].get("email") %></td> <td><a href="#post/<%=contactList.models[i].cid %>">Edit</a> <a href="#del/<%=contactList.models[i].cid %>">Deleted</a> </td> </tr> <%}%> <% } %> </table> <div class="btn-group" role="group" aria-label="..." style="float:right"> <button type="button" class="btn btn-default" id="btnAdd">Add</button> </div> </div> </div> </script> <script src="js/jquery.js"></script> <!--<script src="js/bootstrap.min.js"></script>--> <script type="text/javascript" src="js/underscore.js"></script> <script type="text/javascript" src="js/backbone.js"></script> <script src="js/application.js" type="text/javascript"></script> </body> </html>
(function($){ //创建Model类型 var Contact=Backbone.Model.extend({ idAttribute: "_id", initialize:function(){ //绑定invalid方法 this.bind("invalid",function(model,error){ alert(error); }); }, //设置默认值 defaults:{ firstName:"wu", lastName:"ming", email:"" }, //设置默认值,可以调用model.isValid()方法进行验证 validate: function(attrs, options) { if (attrs.firstName == "") { return "firstName不能为空!"; } if (attrs.lastName == "") { return "lastName不能为空!"; } if (attrs.email == "") { return "email不能为空!"; }; } }); //创建以ocntact的集合类型 var Contacts=Backbone.Collection.extend({ model:Contact, initialize:function(){ } }); //页面列表视图 var ContactListView=Backbone.View.extend({ el:"#page-body", render:function(context){ var template=_.template($("#divContactList").html()); $(this.el).html(template(context)); },events: { 'click #btnAdd': 'goToEdit' },goToEdit:function(){ app_router.navigate("add", {trigger:true,replace:true}); } }); //编辑视图 var ContactEditView=Backbone.View.extend({ el:"#page-body", render:function(context){ var template=_.template($("#divContactEdit").html()); $(this.el).html(template(context)); },events: { 'click #btnBack': 'backToIndex', 'click #btnSubmit': 'submit' },backToIndex:function(){ app_router.navigate("", {trigger:true,replace:true}); },submit:function(){ var firstName=$("#txtFirstName").val(); var lastName=$("#txtLastName").val(); var email=$("#txtEmail").val(); var hdId=$("#hdIdentity").val(); var model=new Contact(); if(firstName=="")return; model.set({firstName:firstName,lastName:lastName,email:email}); //model.validate(); //模型验证 if(model.isValid()){ var model1=contactList.get(hdId); //是否找到这个模型,存在则个性,否则新增 if(model1!=undefined){ //修改模型 for(var i=0;i<contactList.models.length;i++){ if(contactList.models[i].cid==hdId){ contactList.models[i].set({firstName:model.get("firstName"),lastName:model.get("lastName"),email:model.get("email")}); break; } } }else{ contactList.add(model); } //自动跳转到首页 app_router.navigate("", {trigger:true,replace:true}); } } }); //创建路由 var AppRouter=Backbone.Router.extend({ routes:{ "post/:id":"edit",//修改方法 "del/:id":"del",//删除路由 "add":"add",//添加路由 '': 'defaultRoute',//默认 "*actions":"defaultRoute" }, defaultRoute:function(actions){ var listView=new ContactListView(); listView.render(contactList); }, del:function(id){ var model=this.getContact(id); contactList.remove(model); app_router.navigate("", {trigger:true,replace:true}); }, edit:function(id){ //alert("edit"); var model=this.getContact(id); //alert(model); var editView=new ContactEditView(); editView.render({model:model}); }, add:function(actions){ //alert(actions); var model=new Contact(); var editView=new ContactEditView(); editView.render({model:model}); }, getContact: function(id) { return contactList.get(id); } }); /*程序开始时新增三个模型*/ var contact1=new Contact(); var contact2=new Contact(); var contact3=new Contact(); contact1.set({firstName:"xiao",lastName:"ming",email:"123@qq.com"}); contact2.set({firstName:"xiao",lastName:"hua",email:"123@qq.com"}); contact3.set({firstName:"xiao",lastName:"x",email:"123@qq.com"}); //添加到Collection中 var contactList = new Contacts(); contactList.add(contact1); contactList.add(contact2); contactList.add(contact3); //赋值给全局变量以供调用 window.contactList=contactList; //创建路由,全局启动 var app_router=new AppRouter; window.app_router=app_router; Backbone.history.start(); })(jQuery);
附源码:
相关文章推荐
- LeetCode 231:Power of Two
- 过滤器统计访问次数
- C++设计模式
- js bool true false 真假比较
- GPS卫星信号(一):测距码信号
- HDU 1548 A strange lift
- 【特别重要!!!快排的partition思想】【leetcode题解】【M】【71】Kth Largest Element in an Array
- Android 自定义帧动画
- C++模板简单介绍
- react-native源码分析系列四 ReactRootView
- HDU 1505 求最大子矩阵(二维)
- 根据后序和中序回复先序
- iOS内存管理2&之调试内存错误
- Android--HTTP协议
- mediastreamer2移植到arm,带video版本
- 机器学习:支持向量机(SVM)
- 检查点(Checkpoint)的本质
- OC-学习Tips
- poj_3006
- STM32之GPIO的使用