0

Backbone JS強烈建議您使用jQuery。但是,它並不是非常擅長jQuery。例如,jQuery刪除了新運營商的必要性,骨幹網大量使用它。骨幹JS不是很像jQuery嗎?

另一方面,我正在尋找一個基於原型繼承而不是經典繼承(新)的框架。 jQuery不屬於這個類別,這只是我傾向的一種架構風格。

有沒有使用原型繼承的框架,還是它滾動自己的橋樑模式?

+1

據我所知,Backbone建議使用jQuery,因爲兩個庫互相恭維對方 - 不一定與庫的「樣式」有關。 _完全免責聲明:我不是一個Backbone JS傢伙._ – 2011-03-02 21:05:22

+0

只有在您沒有編寫自己的庫來處理DOM和本地事件時,才需要jQuery。不幸的是,沒有多少jQuery開發人員能夠在沒有正式語言背景的情況下選擇骨幹的概念。 jQuery非常適合快速將小部件添加到HTML頁面,但缺乏創建應用程序的構建工具。 – rxgx 2011-03-16 02:39:05

+2

我明白你的意思,但這個問題不是以一種容易回答的方式提出的。首先你要比較jQuery和Backbone的開發風格,但是你並沒有真正提出一個問題。然後你繼續問關於原型繼承,這似乎與你的問題的標題沒有多大關係。 – keturn 2011-04-05 23:46:50

回答

12

Backbone和jQuery解決了不同的問題......骨幹實質上爲您提供了一個結構,以便製作Javascript重量級的應用程序......它爲您提供模型,集合,視圖和控制器(儘管僅基於一天的播放它對我來說就像控制器用於佈線一樣,並且視圖有點像經典控制器)

主幹對jQuery(或者Zepto,如果你這樣傾向於)傾向於依賴,以幫助它做事情像AJAX請求。

你是正確的 - 它是不是很喜歡jQuery的,但它爲您提供非常不同的東西......


UPDATE

從版本0.5.0骨幹已改名控制器到路由器,這應該讓來自MS MVC/Rails等的人們更加明顯......

「我們藉此機會澄清了0.5的一些命名。 0發佈。控制器現在是路由器」

http://documentcloud.github.com/backbone/#Router

+0

Re:更新,顯然是控制器被完全刪除。 – 2011-09-30 03:17:19

4

我完全贊同保羅提供的答案達成一致,也願重申,你的問題是它的本質曖昧。

jQuery是高度DOM爲中心,爲您提供了在DOM上運行的絕佳工具,無論是改變樣式,將遠程內容加載到文檔的某個部分,響應瀏覽器事件......幾乎所有核心​​都集中在DOM上,對於這種功能,你在哪裏操作文檔內容,原型繼承,更重要的是通過D訪問小部件的風格OM(檢查JQueryUI的API)工作得很好。如果您將窗口小部件識別爲javascript對象,那麼您必須跟蹤這些對象以及您在JQueryUI等編程風格的情況下所使用的窗口,您不必這樣做,因爲您可以訪問窗口中存在的任何窗口小部件DOM通過瀏覽DOM結構或簡單地通過它的id(基本上充當元素的全局標識符)。

backbone.js完全是爲不同目的而構建的。該介紹清楚地表明,它基於將數據綁定到DOM的基本原理是不好的。 當您構建按照backbone.js約定結構化的應用程序時,您基本上始終專注於JavaScript對象,該對象可能鏈接到DOM上的某種。 您正在定義與服務器數據源交互的模型,在處理數據內容時觸發事件的模型,可幫助您管理大型數據集的集合......無論如何,您總是使用未硬連接到Document中的JavaScript對象結構體。對於這種情況,通常用傳統的面向對象模型來思考。 一旦你有了一個對象,工作流與你習慣於使用jQuery的工作方式沒有多大區別,因爲骨幹也和jQuery一樣提倡使用jQuery。 因此,以同樣的方式,您可以使用JQuery將事件處理程序綁定到DOM元素,您可以將事件處理程序附加到由模型,收集器等分派的自定義事件。因此,這兩個合併很好。

就其他框架而言,您可能希望檢出提供數據綁定和可觀察性等的Knockout,並且不要求使用new關鍵字來創建實例,而是通過調用ko命名空間中的函數來創建實例可能會吸引你的口味。 KO有豐富的文檔和代碼示例,您可以根據這些示例來決定是否適合您的口味。我不能更多地評論KO,因爲我對它的知識有限,但就backbone.js而言,我強烈建議你不要因爲你不喜歡某些事情被實現的方式而放棄框架。它做它優雅和強大的應該做什麼,並保持一個令人難以置信的小腳印。

1

Backbone.js爲ajax驅動的網絡應用程序帶來了標準化標準,無需刷新頁面即可提供數據。

的jQuery帶來了一套工具來幫助你,不用擔心你在運行代碼瀏覽器中完成基本的東西。

他們沒有任何共同之處。這就像比較錘子(jQuery)和工具箱(backbone.js)。錘子只是工具箱的一部分,而不是其他方式。

所以,是的! Backbone.js不像jQuery。

2

我想你會因爲對原型繼承的誤解和你在框架中實際需要的東西而感到苦惱。如果您正在修改原型但從未使用關鍵字new,那麼您絕不會創建新對象。如果你正在尋找一個抽象的對象創建框架,這是另一個話題,但你不應該害怕使用關鍵字new;這是JavaScript的重要組成部分。

實際上,您可以在jQuery中使用new語法,而當您不使用它時,jQuery實際上會用new語法以及您傳遞給它的參數再次回顧自己。這是純粹的語法糖,對任何事情都沒有什麼影響。 「在另一個說明中,我正在尋找一個基於原型繼承而不是經典繼承(新)的框架。」

骨幹建立在通過內置於所有模型,集合和視圖的方法extend的原型繼承上。它非常容易使用,並且增加了像super這樣的東西 - 一個掛鉤到父級原型中的東西 - 這對於普通的JS原型來說可能更難做到。

+0

「新」是否是必不可少的取決於你如何看待它。通過'Object.create','new'關鍵字變得過時了。事實上,我認爲'新'是醜陋和混亂。關於該主題的美麗文章:[瞭解JavaScript中的「原型」](http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/) – feklee 2012-07-28 09:53:26

1

「我正在尋找一個基於原型繼承的框架,比經典繼承新操作符的原型更多」。

Javascript上沒有'古典'繼承。實際上,沒有其他標準的原型方法比使用'new',也許jQuery只是提供了一種在內部執行'new'的方法。

var jQuery = function(selector, context) { 
    // The jQuery object is actually just the init constructor 'enhanced' 
    return new jQuery.fn.init(selector, context, rootjQuery); 
}, 
+0

Object.create https://developer.mozilla。 org/en/JavaScript/Reference/Global_Objects/Object/create/ – Drew 2012-07-27 17:17:37

+0

更正:標準和多用戶更新方式(包括IE8) – 2012-10-05 10:25:09