您好,登錄后才能下訂單哦!
小編給大家分享一下Backbone.js Wine Cellar中CRUD的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
您將學(xué)習(xí)創(chuàng)建、更新及刪除 (CRUD) 葡萄酒。
HTTP 方法 | URL | 操作 |
GET | /api/wines | 檢索所有葡萄酒 |
GET | /api/wines/10 | 檢索 id == 10 的葡萄酒 |
POST | /api/wines | 添加新葡萄酒 |
PUT | /api/wines/10 | 更新 id == 10 的葡萄酒 |
DELETE | /api/wines/10 | 刪除 id == 10 的葡萄酒 |
這些服務(wù)的 PHP 版本(使用Slim 框架)均將隨下載內(nèi)容一同提供。 本文還將提供一個(gè)類(lèi)似的 Java 版本的 API(使用 JAX-RS)。
搭配使用 Backbone.js 和非 RESTful 服務(wù)
如果您的持久層無(wú)法通過(guò) RESTful 服務(wù)進(jìn)行提供,您可以替換 Backbone.sync。在本文檔中:
“Backbone.sync 是一個(gè)函數(shù), Backbone 每次嘗試讀取模型或?qū)⑵浔4嬷?a title="服務(wù)器" target="_blank" href="http://kemok4.com/">服務(wù)器時(shí)都會(huì)調(diào)用該函數(shù)。默認(rèn)情況下,它使用 (jQuery/Zepto).ajax 發(fā)出 RESTful JSON 請(qǐng)求。您可以替換它,以便利用不同的持久性策略,比如 WebSockets、XML 傳輸或本地存儲(chǔ)?!?/p>
我不會(huì)在本教程中討論非 RESTful 服務(wù)的使用。有關(guān)更多信息,請(qǐng)參閱文檔 。
添加創(chuàng)建、更新和刪除功能
您可以 運(yùn)行將在本教程中進(jìn)行編碼的應(yīng)用程序。此在線版本的創(chuàng)建、更新和刪除功能均已禁用。
此在線版本的創(chuàng)建、更新和刪除功能均已禁用。
圖 2. backbone.js 代碼
代碼重點(diǎn)
Wine(第 2 行至第 14 行)
第二部分向該葡萄酒模型添加了兩個(gè)屬性,如下所示:
(1)urlRoot (第 3 行):RESTful 服務(wù)終端將檢索或保存模型數(shù)據(jù)。請(qǐng)注意,只有在檢索/保存獨(dú)立于集合的模型時(shí)才需要使用此屬性。如果該模型是集合的一部分,集合中定義的 URL 屬性足以供 Backbone.js 了解如何使用您的 RESTful API 檢索、更新或刪除數(shù)據(jù)。
(2)Defaults (第 4 行):為模型創(chuàng)建新實(shí)例時(shí)使用的默認(rèn)值。此屬性是可選屬性。但是,此應(yīng)用程序需要使用此屬性促使 wine-details 信息模板呈現(xiàn)“空”葡萄酒模型對(duì)象(該情況將在添加新葡萄酒時(shí)發(fā)生)。
WineListView(第 22 行至第 40 行)
當(dāng)用戶(hù)添加新葡萄酒時(shí),您希望它自動(dòng)顯示在列表中。要做到這一點(diǎn),請(qǐng)將視圖綁定至 WineListView 模型(葡萄酒集合)的添加事件。當(dāng)事件觸發(fā)后,該應(yīng)用程序會(huì)創(chuàng)建新的 WineListItemView 實(shí)例并將其添加到該列表中。
WineListItemView(第 42 行至第 62 行)
(1)當(dāng)用戶(hù)改變葡萄酒時(shí),您希望對(duì)應(yīng)的 WineListItemView 自動(dòng)重新呈現(xiàn)以反映這種變化。要做到這一點(diǎn),請(qǐng)將視圖綁定至其模型的更改事件,然后在觸發(fā)事件時(shí)執(zhí)行 Render 函數(shù)。同樣,當(dāng)用戶(hù)刪除葡萄酒時(shí),您希望自動(dòng)刪除列表項(xiàng)。
(2)要做到這一點(diǎn),請(qǐng)將視圖綁定至其模型的破壞事件,然后在觸發(fā)事件時(shí)執(zhí)行我們的自定義 Close 函數(shù)。
重要注意事項(xiàng): 為避免內(nèi)存泄露及事件多次觸發(fā),重要的是先解除事件偵聽(tīng)器綁定,然后再?gòu)?DOM 中刪除列表項(xiàng)。
(3)請(qǐng)注意,無(wú)論發(fā)生哪種情況,您都不用承擔(dān)重新呈現(xiàn)整個(gè)列表的費(fèi)用。您只能重新呈現(xiàn)或刪除受更改影響的列表項(xiàng)。
WineView(第 64 行至第 123 行)
本著封裝精神,Save 和 Delete 按鈕的事件處理程序均在 WineView 內(nèi)部進(jìn)行定義,這與將它們作為自由懸掛式代碼塊在“類(lèi)”定義外部定義截然相反。使用 Backbone.js 事件語(yǔ)法,采用 jQuery 幕后委托機(jī)制。
您始終可以根據(jù)用戶(hù)在表單中的輸入內(nèi)容采用以下不同方法來(lái)更新模型:
(1)“實(shí)時(shí)”方法:使用更改處理程序在表單更改時(shí)更新模型。這種方法從本質(zhì)上而言是雙向數(shù)據(jù)綁定方法。模型和 UI 控件始終同步。您可以利用這種方法選擇將更改實(shí)時(shí)發(fā)送至服務(wù)器(隱式保存),還是等到用戶(hù)單擊 Save 按鈕時(shí)再發(fā)送更改(顯示保存)。***個(gè)選項(xiàng)在存在交叉字段驗(yàn)證規(guī)則時(shí)不正式也不可行。而第二個(gè)選項(xiàng)可能需要您撤銷(xiāo)模型更改,如果用戶(hù)在未單擊 Save 的情況下導(dǎo)航至其他項(xiàng)目的話。
(2)“延遲”方法:等到用戶(hù)單擊 Save 時(shí)再根據(jù) UI 控件的新值更新模型,然后將這些更改發(fā)送至服務(wù)器。
本討論主題并非 Backbone.js 特有,因此本文并未就此進(jìn)行探討。為簡(jiǎn)單起見(jiàn),我在此處使用延遲方法。但是,我依然導(dǎo)入更改事件,并利用其記錄控制臺(tái)更改。我發(fā)現(xiàn)此方法在調(diào)試應(yīng)用程序(特別是要確保我已經(jīng)清除綁定,請(qǐng)參見(jiàn) Close 函數(shù))時(shí)非常有效。如果您發(fā)現(xiàn)更改事件觸發(fā)多次,則可能沒(méi)有相應(yīng)地清除綁定。
HeaderView(第 125 行至第 148 行)
Backbone.js 視圖通常用于呈現(xiàn)域模型(比如 WineListView、WineListItemView 及 Wine View)。但它們也可以用來(lái)創(chuàng)建復(fù)合 UI 組件。例如,在此應(yīng)用程序中,我們定義的標(biāo)頭視圖(一種工具欄)可由多個(gè)不同組件構(gòu)成,并且可以封裝其自身邏輯。
看完了這篇文章,相信你對(duì)“Backbone.js Wine Cellar中CRUD的示例分析”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。