這是一個noob問題,但我真的很想問它。我知道node.js
可以處理服務器端腳本和backbone.js
「給結構」的Web應用程序,但爲什麼我想先了解他們,當我已經知道jQuery
並處理所有的服務器端邏輯使用Django
。如果我使用backbone.js
或node.js
backbone.js和node.js與jQuery完全不同嗎?
回答
對此的簡單回顧答案是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教程,讓每個人都開始。一種新的編程方式可能是一種轉變,有時很難將頭部包裹起來,但如果您後悔,我會很驚訝。
我會得到任何處理速度增加或什麼東西它們都是不同的東西。如果你已經知道如何使用Django和jQuery,你不需要使用它們來獲得速度。但他們是新的很酷的東西,所以你至少應該好好玩一玩。
是的,我同意。如果有的話,你的Django和jQuery技能將使Backbone更有趣,更有效,更易於學習。這對您的其他技能非常讚賞,特別是如果您有興趣製作複雜的客戶端大量應用程序。在學習Backbone時,您還將學習Backbone依賴的Underscore.js知識。非常非常方便的一組功能。 – jmk2142
- 1. 分頁與backbone.js和node.js
- 2. Request.Url.Host與Request.Headers [「host」]完全相同嗎?
- 3. 以下完全相同嗎?
- 4. 與完全不
- 5. 我的jQuery插件與IE8完全不兼容嗎?
- 6. CORS與Node.js和jQuery
- 7. 與ThemeRoller提供的完全不同的jQuery UI主題
- 8. Plug +和BackBone.js不同意
- 9. backbone.js + node.js - express.js
- 10. 從Backbone.js模型完全刪除屬性
- 11. 與node.js中和jQuery刮
- 12. jquery slideToggle不完全工作
- 13. 的JQuery的setInterval完全不
- 14. 完全不同的主頁
- 15. 問題與jQuery和Backbone.js的3
- 16. MySQLi OOP與PDO完全相同嗎?還是他們有分歧?
- 17. 命名與匿名功能:完全相同嗎?
- 18. 「If語句」與Java中的「Switch語句」完全相同嗎?
- 19. 你能寫一個與BGInfo完全相同的PowerShell腳本嗎?
- 20. 應該==運算符與Equals()完全相同嗎?
- 21. htmlentities與字符串htmlentities完全相同嗎?
- 22. JQuery的自動完成與Node.js的表達和AJAX
- 23. Python C API與C++完全兼容嗎?
- 24. SessionScope與ISession完全等價嗎?
- 25. Node.js如何與tomcat不同
- 26. Boilerplate.js與Backbone.js有什麼不同?
- 27. console.time()在node.js中安全嗎?
- 28. '完全相同'的字符串不同
- 29. 與笨和Backbone.js的
- 30. 的Node.js和Backbone.js的資產版本
backbone是一個JS庫,它可以很容易地與服務器上的Django類型模型進行通信。如果你想在你的前端代表一個django模型,並動態地處理更新,刪除,創建等等,可能有數以千計的JS生成的對象,這對jQuery來說不是一個容易的項目嗎? –
你的意思是說我可以將任何「Django(python)」對象傳遞給主幹,我可以在前端使用類似「myObj.someattr」的方式訪問「Django(python)」對象的所有屬性?目前的做法是對「Django(python)」對象進行json化並將其傳遞給jQuery。 –
是的。如果您使用Django,Slim將JSON傳回給客戶端,那麼Node.js中的一些RESTful框架 - Backbone將吞噬它併爲您提供模型數據對象,這些對象具有許多內置的好東西(功能)。我'我非常偏愛我喜歡這個框架,所以我對我的回答有點瘋狂。希望你能得到一些Backbone-y代碼的一個小風味。 – jmk2142