Backbone 為複雜Javascript應用程式提供模型(models)、集合(collections)、視圖(views)的結構。其中模型用於綁定鍵值資料和自訂事件;集合附有可枚舉函數的豐富API; 視圖可以宣告事件處理函數,並透過RESTful JSON介面連接到應用程式。
當我們開發含有大量Javascript的web應用程式時,首先你需要做的事情之一就是停止向DOM物件附加資料。 透過複雜多變的jQuery選擇符和回調函數來建立Javascript應用程序,包括在HTML UI,Javascript邏輯和資料之間保持同步,都不複雜。 但對付客戶端應用來說,良好的架構通常是有很多好處的。
Backbone將資料呈現為模型, 你可以創建模型、對模型進行驗證和銷毀,甚至將它保存到伺服器。 當UI的變化引起模型屬性改變時,模型會觸發"change"事件; 所有顯示模型資料的視圖都會接收到該事件的通知,繼而視圖重新渲染。 你無需尋找DOM來搜尋指定id的元素去手動更新HTML。 —旦模型改變了,視圖便會自動變化。
backbone.js提供了一套web開發的框架,透過Models進行key-value綁定及custom事件處理,透過Collections提供一套豐富的API用於枚舉功能,透過Views來進行事件處理及與現有的Application透過RESTful JSON介面進行互動.它是基於jquery和underscore的一個js框架。
Backbone天生就不固執己見。你從文件上獲取的一個最基本觀點是:使用backbone.js提供的工具,做任何你想做的事。
這點非常好,因為有這麼多不同的應用場合,而且對於開始寫app來說也非常容易。這種途徑可能避免我們在剛開始時犯下盡可能少的錯誤。
當一件事做錯的時錯,我們要發現並找到改正的方法。
以下這些提示,可以讓你避免我們在進行Backbone.js開發時所碰到錯誤:
1. 視圖(Views)是資料無關的(Data-Less)
資料屬於模型(models)不是視圖。下次你發現 你在一個視圖中儲存資料(或更糟:在DOM裡),馬上把它移到model裡。
如果你沒有model,創建一個非常簡單:
this.viewState = new Backbone.Model();
真的不需要任何其它操作。
你可以在你的資料上偵聽改變事件,甚至跟你的伺服器線上同步。
2. DOM事件只改models
當一個DOM事件觸發時,例如點擊了一個按鈕,不要讓它改變view本身。改這個model.
改變DOM且不改變狀態代表你的狀態仍儲存在DOM中。這條規則可以讓你保持狀態一致。
如果點擊了一個「載入更多」邊接,不要展開視圖,只需要改變model:
this.viewState.set('readMore', true);
好了,但是視圖何時改變?好問題,下一條規則會回答。
3.DOM只有在model改變時才改變
事件是很神奇的,請使用他們。最簡單的方法是每次改變後觸發一遍。
this.listenTo(this.stateModel, 'change', this.render);
更好的方法是只有在需要的時侯觸發改變。
this.listenTo(this.stateModel, 'change:readMore', this.renderReadMore);
這個視圖會一直與他的model保持一致。無論model是如何改變的:從指令介面或偵錯資訊處回應動作,這個視圖會一直保持更新。
4. 綁定的東西必須解綁
當視圖從DOM移除時,使用'remove'方法,它必須從所有綁定的事件上解綁。
如果你使用'on'綁定,你的職責是使用'off'去解綁。如果沒有解綁,記憶體回收器無法釋放內存,從而造成你應用的效能下降。
這就是'listenTo'的由來。它會追蹤視圖的綁定和解綁。 Backbone把這個從DOM移動之前,會進行'stopListening'。
// Ok: this.stateModel.on('change:readMore', this.renderReadMore, this); // 神奇: this.listenTo(this.stateModel, 'change:readMore', this.renderReadMore);
5. 保持鍊式寫法
從render和remove方法裡,總是回到'this'。這樣可以讓你寫出方法鏈。
view.render().$el.appendTo(otherElement);
這很方法,不要打破它。
6. 事件比回調好
等待回應事件比回調好
Backbone模型(models)預設會觸發'sync'和'error'事件,因此可以使用這些事件代替回呼。考慮一下這兩種情況。
model.fetch({ success: handleSuccess, error: handleError }); //这种更好: view.listenTo(model, 'sync', handleSuccess); view.listenTo(model, 'error', handleError); model.fetch();
model何時填充(fetched)並不重要,handleSucess/handleError會被呼叫。
7. Views是有作用域的
視圖永遠不要操作除了它本身以外的DOM。
view會引用它自己的DOM元素,如'el'或jquery物件'$el'
那表示你永遠不要直接使用jQuery:
$('.text').html('Thank you');
請把DOM元素的選擇限定到你自己的域裡面:
this.$('.text').html('Thank you'); // 这等价于 // this.$el.find('.text').html('Thank you');
如果你需要更新一个别的不同的视图,只要触发一个事件,让别的视图去做。你也可以使用Backbone的全局Pub/Sub系统。
例如,我们阻止页面滚动:
var BodyView = Backbone.View.extend({ initialize: function() { this.listenTo(Backbone, 'prevent-scroll', this.preventScroll); }, preventScroll: function(prevent) { // .prevent-scroll 有下面的CSS规则: overflow: hidden; this.$el.toggleClass('prevent-scroll', prevent); } }); // 现在从任何其他地方调用: Backbone.trigger('prevent-scroll', true); // 阻止 scrolling Backbone.trigger('prevent-scroll', false); // 允许 scrolling
还有一件事
只要读读backbone的源代码,你会学到更多。看一看backbone.js的源代码,然后看看这些神奇的事情是怎么实现的。这个库非常小,而且可读性很好,整个读完不会超过10分钟的。
这些小贴士帮助我们写干净的,更好的可读的代码。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

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

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

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能