2012-08-31 58 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