backbone.js的基本目的和优点是什么?

4
我听说在使用html5和node.js时,backbone.js非常有用。我已经阅读了文档,但仍然无法理解backbone.js的基本目的。请有人用简单的语言向我解释一下。如果您能指导我好的教程,那就更好了。谢谢。
编辑:请参见此问题backbone.js的目的是什么?

只是想说backbone并不真正关心后端,你可以将backbone与任何使用REST的东西一起使用,即使是expressjs + nodejs + backbone也是一种享受。 - skyw00lker
2个回答

11
几乎所有富客户端的Web应用程序都有一个或多个对象列表,当您执行某些操作时,其中一个对象需要更改其显示方式。以TODO列表为例,这是Backbone.js的典型示例。以下是一些可能的解决方法:
  • 当您进行更改时,使用jQuery或类似工具来更改HTML div本身的文本。但是,当您要将其保存到服务器时怎么办?您会从所有HTML div的文本中读取数据,使其成为数据的权威来源吗?这样做感觉笨重!如果您有其他不想向用户显示的状态呢?或者如果您想在两个不同的位置显示相同的对象呢?
  • 当您进行更改时,请在某个地方更新普通的Javascript对象,例如:window.todos = [{id:1, foo:'bar'},...]. 但是,当您更改它时,必须重新渲染使用该对象的所有内容,并告诉服务器有关更改的信息。如果您有两种或更多不同的方法来更改状态(例如TODO应用程序的“标记全部完成”功能),那么您将重复很多代码!
Backbone.js通过为每个TODO对象创建Backbone.Model来解决此问题,该模型包含数据的权威版本。无论您在何处更改模型的属性,它都会通知该对象的所有视图重新呈现。您可以使用单个函数调用将整个模型集合与RESTful服务器同步。您的应用程序将更易于维护,并且可以更轻松地添加任意功能。

两年后的补充...在我上面提到的“重新渲染”中,Backbone.View会为任何监听刚刚更改的模型的组件抛弃DOM,并从模板重构它。如果有人觉得这种方式效率低下,我鼓励你去了解一下React,它通过添加一个额外的差异层来解决这个问题,只告诉浏览器对UI进行最小必要的更改。当与Backbone.Model结合使用时,效果非常好! - btown

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接