【问题标题】:Non-RESTful backend with backbone.js带有backbone.js 的非RESTful 后端
【发布时间】:2014-09-06 08:38:03
【问题描述】:
我正在评估backbone.js 作为一个潜在的javascript 库,用于具有几个不同后端的应用程序:WebSocket、REST 和生成 JSON 的 3rd 方库。我读过一些观点,只要 api 是“按书本”并遵循适当的 http 措辞,backbone.js 就可以很好地与 RESTful 后端配合使用。有人可以详细说明这是什么意思吗?
另外,让backbone.js连接WebSockets有多麻烦?最后,将backbone.js 模型与返回JSON 的函数集成是否有任何问题——换句话说,数据模型是否总是需要通过REST 提供服务?
【问题讨论】:
标签:
rest
backbone.js
websocket
【解决方案1】:
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 由用户 (YOU) 触发。 fetch 会将实际获取(ajax、套接字、本地存储,甚至是立即返回 json 的函数)委托给其他函数(collection#sync)。 collection.sync 中的任何函数都必须接受 3 个参数:
-
action:
create(用于创建),action:read(用于获取),delete(用于删除)或update(用于更新)= CRUD。
-
context(这个变量)——如果你不知道这是做什么的,别担心,暂时不重要
-
选项 - 魔法在哪里。我们只关心 1 个选项
- success:当数据“准备好”时调用的回调。这是
collection#fetch 感兴趣的回调,因为那是它接管并做事的时候。唯一的要求是 sync 将以下第一个参数传递给它
-
response:返回的实际数据
- 现在
必须在完成获取数据后执行的选项中返回成功回调。它负责的功能是
- 每当
collection#sync 完成它的工作时,collection#fetch 就会接管(将回调传入成功)并执行以下漂亮步骤:
- 调用
set 或reset(就这些目的而言,它们大致相同)。
- 当
set 结束时,它会触发集合上的sync 事件,向全世界广播“哟,我准备好了!!”
- 那么
set 会发生什么。好一堆东西(重复数据删除、解析、排序、解析、删除、创建模型、传播更改和一般维护)。别担心。它有效;)您需要担心的是如何连接到此过程的不同部分。您应该担心的唯一两个(如果您以奇怪的方式包装数据)是
-
collection#parse 用于解析集合。应该接受来自 server/ajax/websocket/function/worker/whoknowwhat 的原始 JSON(或任何格式)并将其转换为对象数组。接受第一个参数resp(JSON)并且应该吐出一个变异的响应来返回。轻轻松松。
-
model#parse。与集合相同,但它接收原始对象(即假设您遍历collection#parse 的输出)并拆分出一个“未包装”对象。
- 放下电脑去海滩,因为您完成工作的时间是您认为所需时间的 1/100。
这就是您需要知道的所有内容,以便实现您想要的任何服务器系统来代替普通的“ajax 请求”。