我正在评估backbone.js作为一个潜在的javascript库,在一个应用程序中使用,它将有几个不同的后端:WebSocket, REST和第三方库生成JSON。我读过一些意见,认为只要api是"按书"编写的,并遵循适当的http规范,backbone.js就能很好地与RESTful后端配合使用。有人能详细解释一下这是什么意思吗?
另外,有多少麻烦是得到backbone.js连接到WebSockets?最后,将backbone.js模型与返回JSON的函数集成是否存在任何问题——换句话说,数据模型是否总是需要通过REST提供服务?
Backbone的强大之处在于它具有令人难以置信的灵活和模块化结构。这意味着骨干的任何部分都可以使用、扩展、取出或修改。这包括AJAX功能。
Backbone并不"关心"你从哪里获得集合或模型的数据。它将通过提供开箱即用的RESTful"ajax"解决方案来帮助您,但如果您想使用其他解决方案,它也不会很疯狂!
这允许你找到(或编写)任何你想要处理服务器交互的插件。看看backplug。io, Google和Github。
专门针对socket,有backbone. ibinding .
找不到插件,不用担心。我可以确切地告诉你如何写一个(这比听起来容易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
由用户(YOU)触发。fetch
将委托实际抓取(ajax,套接字,本地存储,甚至是一个立即返回json的函数)给其他函数(collection#sync
)。collection.sync
中的任何函数都必须有3个参数:- action:
create
(用于创建),action:read
(用于获取),delete
(用于删除)或update
(用于更新)= CRUD。 - context (this变量)-如果你不知道这是做什么的,不要担心,现在不重要
- options - da magic所在的位置。我们只关心一个选项
- success:当数据"就绪"时调用的回调。这是
collection#fetch
感兴趣的回调,因为这是它接管并做它的事情的时候。唯一的要求是sync
传递给它以下第一个参数 -
response
:返回的实际数据
- success:当数据"就绪"时调用的回调。这是
- 现在必须在它的选项中返回一个成功回调当它完成获取数据时执行。它负责的函数是
- action:
- 每当
collection#sync
完成它的事情,collection#fetch
收回(与回调传递到成功),并做以下漂亮的步骤:- 调用
set
或reset
(对于这些目的,它们大致相同)。 - 当
set
完成时,它会触发sync
事件,向世界广播"你,我准备好了!!"
- 调用
- 那么在
set
中发生了什么?很多东西(删除、解析、排序、解析、删除、创建模型、传播更改和一般维护)。别担心。它是有效的;)你需要担心的是你如何在这个过程中融入不同的部分。您应该担心的只有两个(如果您以奇怪的方式包装数据)-
collection#parse
用于解析集合。应该接受来自server/ajax/websocket/function/worker/whoknowwhat的原始JSON(或任何格式),并将其转换为对象数组。接收第一个参数resp
(JSON),并应该为返回输出一个突变的响应。容易peasy。 -
model#parse
。与collection相同,但它接受原始对象(即想象您迭代collection#parse
的输出)并拆分为"未包装"对象。
离开你的电脑,去海滩,因为你完成工作的时间是你预计的1/100。 -
这就是您需要知道的,以便实现您想要的任何服务器系统来代替香草的"ajax请求"。