我将backbone.js评估为一个潜在的javascript库,用于一个应用程序,该应用程序将有几个不同的后端:WebSocket,REST和第三方库生成JSON。我已经阅读了一些观点,认为backbone.js可以与RESTful后端完美配合,只要这个api是由书中的'并遵循适当的http verbage。有人可以详细说明这意味着什么吗?
另外,让backbone.js连接到WebSockets有多麻烦?最后,将backbone.js模型与返回JSON的函数集成是否有任何问题 - 换句话说,数据模型是否总是需要通过REST提供?
答案 0 :(得分:6)
Backbone的强大之处在于它具有令人难以置信的灵活性和模块化结构。这意味着您可以使用,扩展,取出或修改Backbone的任何部分。这包括AJAX功能。
Backbone不“关心”您从哪里获取集合或模型的数据。它将通过提供开箱即用的RESTful“ajax”解决方案来帮助您,但如果您想使用其他东西,它不会生气!
这允许您查找(或编写)您想要处理服务器交互的任何插件。只需查看backplug.io,Google和Github。
特别是对于套接字,有backbone.iobind。
找不到插件,不用担心。我可以准确地告诉你如何写一个(它比声音容易100倍)。
您需要了解的第一件事是覆盖行为非常容易。主要有两种方式:
全局:
Backbone.Collection.prototype.sync = function() {
//screw you Backbone!!! You're completely useless I am doing my own thing
}
每个实例
var MySpecialCollection = Backbone.Collection.extend({
sync: function() {
//I like what you're doing with the ajax thing... Clever clever ;)
// But for a few collections I wanna do it my way. That cool?
});
您需要知道的另一件事是当您在集合上调用“fetch”时会发生什么。这是“按书”/“开箱即用行为”的行为:
collection#fetch
由用户(您)触发。 fetch
将委托ACTUAL获取(ajax,套接字,本地存储,甚至是立即返回json的函数)到其他函数(collection#sync
)。无论collection.sync
中的任何函数必须采用3个参数:
create
(用于创建),操作:read
(用于提取),delete
(用于删除)或update
(用于更新)= CRUD。 collection#fetch
感兴趣的回调,因为那是它接管并做它的事情。唯一的要求是sync
传递了以下第一个参数response
:它返回的实际数据collection#sync
完成这件事时,collection#fetch
都会收回(将该回调传递给成功)并执行以下漂亮的步骤:
set
或reset
(出于这些目的,他们大致相同)。set
完成时,它会触发向世界广播的sync
事件“我准备就绪!!”set
会发生什么。很多东西(重复数据删除,解析,排序,解析,删除,创建模型,传播更改和一般维护)。别担心。它有效;)你需要担心的是你如何能够进入这个过程的不同部分。你应该担心的唯一两个(如果你用奇怪的方式包装数据)
collection#parse
用于解析集合。应该接受来自server / ajax / websocket / function / worker / whoknowwhat的原始JSON(或任何格式)并将其转换为对象的ARRAY。接收第一个参数resp
(JSON)并且应该为返回吐出一个变异的响应。容易腻。model#parse
。与集合相同,但它接受原始对象(即想象您迭代collection#parse
的输出)并拆分“未包装”对象。 为了实现您想要的任何服务器系统代替vanilla“ajax请求”,您需要知道的全部内容。