2012-08-31 92 views
2

這是一個noob問題,但我真的很想問它。我知道node.js可以處理服務器端腳本和backbone.js「給結構」的Web應用程序,但爲什麼我想先了解他們,當我已經知道jQuery並處理所有的服務器端邏輯使用Django。如果我使用backbone.jsnode.jsbackbone.js和node.js與jQuery完全不同嗎?

+3

backbone是一個JS庫,它可以很容易地與服務器上的Django類型模型進行通信。如果你想在你的前端代表一個django模型,並動態地處理更新,刪除,創建等等,可能有數以千計的JS生成的對象,這對jQuery來說不是一個容易的項目嗎? –

+0

你的意思是說我可以將任何「Django(python)」對象傳遞給主幹,我可以在前端使用類似「myObj.someattr」的方式訪問「Django(python)」對象的所有屬性?目前的做法是對「Django(python)」對象進行json化並將其傳遞給jQuery。 –

+2

是的。如果您使用Django,Slim將JSON傳回給客戶端,那麼Node.js中的一些RESTful框架 - Backbone將吞噬它併爲您提供模型數據對象,這些對象具有許多內置的好東西(功能)。我'我非常偏愛我喜歡這個框架,所以我對我的回答有點瘋狂。希望你能得到一些Backbone-y代碼的一個小風味。 – jmk2142

回答

12

對此的簡單回顧答案是Backbone提供了您的前端JavaScript代碼結構。當我說結構時,我的意思是說你的代碼將以一種系統,標準,一致的方式在你的應用程序中執行最常見的操作,並且更加有組織,以便你和其他人可以清楚地理解複雜代碼的不同部分。它可以很好地處理任何以RESTful方式從服務器返回的JSON數據,因此您的Django技能將得到很好的使用。

沒有理由不能爲您的項目使用jQuery(僅限於)(Backbone實際上使用jQuery進行DOM操作以及AJAX調用),但是如果您曾經見過代碼可以如何蠕變和交織代碼的其他部分,混合與數據相關的視圖/表示的部分......如果您曾經爲了調試這些代碼而苦苦掙扎,或者需要擴展這些代碼,或者必須從頭開始重建,那麼您的所有應用程序的基本功能需要有...或者如果你發現自己做的事情不一致,你會發現有一點幫助是很好的。 ;-)

骨幹。

我可能是錯的,但我只是想借此機會,你可能不熟悉MVC框架之類的東西。如果您知道MVC框架是什麼(更重要的是,它對開發有什麼好處),那麼Backbone的優勢將顯而易見。骨幹是一種MVC。

特別是對於較大的項目,從代碼維護角度來說,從控制邏輯中分離數據>從演示文稿中變得至關重要。即Model,View,Control = MVC。您可以將Backbone視爲客戶端JavaScript的MVC框架。它實際上是一個MVC的變體(更像MV *),如果你獲得了技術,但其要點是相同的。隨着Javascript性能的不斷提高以及應用程序變得越來越複雜,對於許多開發人員來說,這樣的框架變得越來越重要。當你有其他選擇(Knockout.js等)做類似的事情時,Backbone在人羣中是一個非常好的選擇。

要回答你的一些其他的小問題:

骨幹將與你的Django服務器設置很好地工作。 Backbone使用JSON來處理所有數據。例如,使用Backbone - 您的基本數據對象就是所謂的模型。模型是使用JSON散列創建的。例如,用戶模型可能採取的JSON:

{"user":"Rajat", "username":"backboneLearner"} 

使用骨幹模型而不是僅僅把它作爲一個普通JS對象是模型已經有一堆內置的便利和細微的優點讓我們使用示例:

// Define a Model 
var User = Backbone.Model.extend({ 
    defaults: { 
     "user":undefined, 
     "username":undefined 
    }, 
    urlRoot: 'user' 
}); 

// Instantiate a Model 
var userModel = new User({ 
    "user":"Rajat", 
    "username":"backboneLearner" 
}); 

想要將其保存到您的服務器?

userModel.save(); 

自動爲您進行POST調用。沒有很長的ajax代碼 - 已經在後臺爲您完成了。不喜歡我給你的用戶名?讓我們改變它。

userModel.save({"username":"coolguy"}); 

用同樣的方法save(),骨幹改變用戶名屬性,爲你做POST的PUT請求,而不是因爲它知道你已經救了你的用戶。 (保存的模型有一個由您的Django服務器提供的ID)Backbone表示歡迎。

也許你想在名稱更改您的DOM改變:

<div id="nameDiv">coolguy</div> 

骨幹View對象是負責這類東西。事實上,他們真的很好地玩模特。在你的視圖中,你可以做這樣的事情。

// Create a listener for changes on your user model 
this.userModel.on('change', this.updateNameDiv, this); 

是。 Backbone提供模型,集合和視圖可以製作和收聽的各種特殊事件。你不僅限於這些。你也可以自定義。

// This is the event handler declared in the view 
updateNameDiv: function(model) { 
    this.$("#nameDiv").html(model.get('username')); 
} 

// Change userModel 
userModel.set("username","superman"); 

就是這樣。你的DOM現在看起來像這樣。

<div id="nameDiv">superman</div> 

當涉及到遍歷和操作DOM時,主幹使用所有的jQueries產品。您還可以使用您擁有的所有其他JavaScript技能大量定製Backbone。這是一種框架,可以讓你自由地做出自己的選擇並擴展它。底線是,如果您已經瞭解jQuery,Backbone就不會感到受到限制。作爲另一層抽象,Backbone使得很多繁瑣的事情變得簡單得多。這是一個不斷髮展的社區,一旦你使用它,你可能不想在沒有它的情況下返回編碼。我聲稱的好處並非Backbone專有。那裏肯定有其他一些聰明的框架。但我希望,你明白我爲什麼認爲你應該試一試。如果這個長篇解釋/故事加上例子並沒有讓你信服,那麼只是假裝你被這個框架的熱情所愚弄,並給它一個鏡頭。

有一個初學者的TodoList教程,讓每個人都開始。一種新的編程方式可能是一種轉變,有時很難將頭部包裹起來,但如果您後悔,我會很驚訝。

+5

來快速回答。留在迷你講座。 – super9

+1

是的。我傾向於用答案來矯枉過正。如果您對Backbone上的其他大量文章感興趣,請搜索我的答案歷史記錄。 ;-)我特別關注很多初學者的問題。 – jmk2142

1

我會得到任何處理速度增加或什麼東西它們都是不同的東西。如果你已經知道如何使用Django和jQuery,你不需要使用它們來獲得速度。但他們是新的很酷的東西,所以你至少應該好好玩一玩。

+1

是的,我同意。如果有的話,你的Django和jQuery技能將使Backbone更有趣,更有效,更易於學習。這對您的其他技能非常讚賞,特別是如果您有興趣製作複雜的客戶端大量應用程序。在學習Backbone時,您還將學習Backbone依賴的Underscore.js知識。非常非常方便的一組功能。 – jmk2142