Backbone.js是一套重量级的web开发框架,它是基于jquery和underscore的一个js框架,主要由三个部分组成:Model,Collection,View。
1.Model:创建模型来表示数据对象,可以进行数据验证,将对象销毁或者保存到服务器上。
2.Collection:是Model的集合,可以增加或删除元素,以及一些方便的操作。
3.View:可以绑定html模板和事件,可以将模型或者集合渲染到页面上,可以通过监听模型改变或销毁等事件重新渲染页面。
Backbone的优势在于将数据和界面很好的分离开来,将事件的绑定很好的剥离出来,便于管理和迭代,使得Javascript的模块化更加清晰。Backbone比较适合页面上有大量数据的情况,是页面内复杂的信息沟通更清晰。
下面我用Backbone写了一个增删改查的表格,参照了Backbone官网Todos的例子。Backbone.js本身依赖于jquery和underscore,数据存储我用到了backbone-localstorage.js,将数据存储在本地数据库中,我把主要的js代码贴出来。其中用到了很多jquery,underscore和backbone的方法和事件,请参考相关文档。
$(function(){ //Model:表示一个学生 var Student=Backbone.Model.extend({ //默认值 defaults:function(){ return{ name:"XXX", age:"0", selected:false, id:Students.nextId(), }; }, //初始化的时候判断,如果设置的属性值非法就设为默认值 initialize:function(){ if(!this.get("name")){ this.set({"name":this.defaults().name}); } if(!this.get("age")||!(/(^[1-9]\d*$)/.test(this.get("age")))){ this.set({"age":this.defaults().age}); } }, //标记该学生是否被选中 toggle:function(){ this.save({selected:!this.get("selected")}); } }); //Collection:Model的集合,即所有学生的集合 var Students=Backbone.Collection.extend({ model:Student, //本地数据库,用到backbone-localstorage.js localStorage:new Backbone.LocalStorage("Students-Table"), //返回被选中的学生的集合 selected:function(){ return this.filter(function(student){return student.get('selected');}); }, //给每个学生一个编号 nextId:function(){ if(!this.length) return 1; return this.last().get('id')+1; } }); //定义一个学生集合对象 var Students=new Students; //View:这个视图表示table中的一列,即一个学生,对应一个Model var StudentView=Backbone.View.extend({ //表示<tr></tr>元素 tagName:"tr", //将相应模板写入template属性中,_.template()为underscore.js中的方法 template:_.template($('#item-template').html()), //绑定该tr下的事件 events:{ "click .toggle":"toggleSelect", "dblclick td":"edit", "click a.destroy":"clear", "blur .edit":"close" }, //初始化该View,listenTo监听model的事件 initialize:function(){ //model发生变化就重新渲染视图 this.listenTo(this.model,'change',this.render); //销毁model this.listenTo(this.model,'destroy',this.remove); }, //this.$el为该tr节点元素,将template渲染进该节点,并把model的值写入 render:function(){ this.$el.html(this.template(this.model.toJSON())); //如果该行被选中,则切换样式 this.$el.toggleClass('selected',this.model.get('selected')); return this; }, //判断该行是否被选中,对应model中的selected属性 toggleSelect:function(){ this.model.toggle(); }, //双击td将样式变为可编辑 edit:function(e){ $(e.currentTarget).addClass("editing").find("input,select").focus(); }, //编辑状态下失去焦点,则修改完成 close:function(e){ var input=$(e.currentTarget); if(input.attr('name')=="name"){ if(!input.val()){ input.val(this.model.defaults().name); } this.model.save({"name":input.val()}); }else if(input.attr('name')=="gender"){ this.model.save({"gender":input.val()}); }else{ if(!input.val()||!(/(^[1-9]\d*$)/.test(input.val()))){ input.val(this.model.defaults().age); } this.model.save({"age":input.val()}); } input.parent().removeClass("editing"); }, //删除该行的时候删除相应model clear:function(){ this.model.destroy(); } }); //View:这个视图表示$("#content"),用来表现整个学生表格 var AppView=Backbone.View.extend({ el:$("#content"), //右下角删除学生数目的模板 statsTemplate:_.template($('#stats-template').html()), events:{ "click #add-student":"addNewStudent", "click #clear-selected":"clearSelected", "click #select-all":"selectAll" }, initialize:function(){ this.allCheckbox=$("#select-all"); this.main=$("#main"); this.footer=$('footer'); this.name=$("#new-name"); this.age=$("#new-age"); this.gender=$("#new-gender"); //Collection中增加一个Model就触发add事件 this.listenTo(Students,'add',this.addOne); //一旦调用fetch方法就触法reset事件 this.listenTo(Students,'reset',this.addAll); //all事件表示该View下的所有事件,即触法任意事件就触法all事件 this.listenTo(Students,'all',this.render); //从本地数据库中获取所有学生 Students.fetch(); }, //渲染视图 render:function(){ var selected=Students.selected().length; if(Students.length){ this.main.show(); this.footer.show(); this.footer.html(this.statsTemplate({selected:selected})); }else{ this.main.hide(); this.footer.hide(); } //判断所有学生是否被选中 this.allCheckbox.attr("checked",selected==Students.length?true:false); }, //增加一个学生,同时将model传入StudentView中 addOne:function(student){ var view=new StudentView({model:student}); //将渲染后的每一列添加到表格中 this.$("#student-list").append(view.render().el); }, //增加所有学生,通过Collection.each依次调用addOne方法 addAll:function(){ Students.each(this.addOne,this); }, //增加一个新学生 addNewStudent:function(){ Students.create({name:this.name.val(),gender:this.gender.val(),age:this.age.val()}); this.name.val(''); this.age.val(''); this.gender.val(1); }, //删除选中列,_.invoke(集合,方法) clearSelected:function(){ _.invoke(Students.selected(),'destroy'); }, //选中所有 selectAll:function(){ var selected=this.allCheckbox.attr('checked')=="checked"; Students.each(function(student){ student.save({'selected':selected}); }); } }); //创建View var App=new AppView; });
以上是使用Backbone.js创建一个增删改查表的实例代码 的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。

将矩阵电影特效带入你的网页!这是一个基于著名电影《黑客帝国》的酷炫jQuery插件。该插件模拟了电影中经典的绿色字符特效,只需选择一张图片,插件就会将其转换为充满数字字符的矩阵风格画面。快来试试吧,非常有趣! 工作原理 插件将图片加载到画布上,读取像素和颜色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地读取图片的矩形区域,并利用jQuery计算每个区域的平均颜色。然后,使用

本文讨论了使用浏览器开发人员工具的有效JavaScript调试,专注于设置断点,使用控制台和分析性能。

本文将引导您使用jQuery库创建一个简单的图片轮播。我们将使用bxSlider库,它基于jQuery构建,并提供许多配置选项来设置轮播。 如今,图片轮播已成为网站必备功能——一图胜千言! 决定使用图片轮播后,下一个问题是如何创建它。首先,您需要收集高质量、高分辨率的图片。 接下来,您需要使用HTML和一些JavaScript代码来创建图片轮播。网络上有很多库可以帮助您以不同的方式创建轮播。我们将使用开源的bxSlider库。 bxSlider库支持响应式设计,因此使用此库构建的轮播可以适应任何

数据集对于构建API模型和各种业务流程至关重要。这就是为什么导入和导出CSV是经常需要的功能。在本教程中,您将学习如何在Angular中下载和导入CSV文件

核心要点 利用 JavaScript 增强结构化标记可以显着提升网页内容的可访问性和可维护性,同时减小文件大小。 JavaScript 可有效地用于为 HTML 元素动态添加功能,例如使用 cite 属性自动在块引用中插入引用链接。 将 JavaScript 与结构化标记集成,可以创建动态用户界面,例如无需页面刷新的选项卡面板。 确保 JavaScript 增强功能不会妨碍网页的基本功能至关重要;即使禁用 JavaScript,页面也应保持功能正常。 可以使用高级 JavaScript 技术(


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

WebStorm Mac版
好用的JavaScript开发工具

Atom编辑器mac版下载
最流行的的开源编辑器