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在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具