带有backbone.js的非RESTful后端
我正在评估backbone.js是否是一个潜在的javascript库,可用于具有几个不同后端的应用程序:WebSocket、REST和生成JSON的第三方库。我读过一些观点,认为backbone.js可以很好地与RESTful后端配合使用,只要api是“按书”编写的,并且遵循适当的http措辞。有人能详细解释一下这意味着什么吗带有backbone.js的非RESTful后端,rest,backbone.js,websocket,Rest,Backbone.js,Websocket,我正在评估backbone.js是否是一个潜在的javascript库,可用于具有几个不同后端的应用程序:WebSocket、REST和生成JSON的第三方库。我读过一些观点,认为backbone.js可以很好地与RESTful后端配合使用,只要api是“按书”编写的,并且遵循适当的http措辞。有人能详细解释一下这意味着什么吗 另外,让backbone.js连接到WebSocket有多麻烦?最后,将backbone.js模型与返回JSON的函数集成是否存在任何问题?换句话说,数据模型是否总是需
另外,让backbone.js连接到WebSocket有多麻烦?最后,将backbone.js模型与返回JSON的函数集成是否存在任何问题?换句话说,数据模型是否总是需要通过REST提供服务?backbone的强大之处在于它具有难以置信的灵活性和模块化结构。这意味着您可以使用、扩展、取出或修改主干的任何部分。这包括AJAX功能 主干网并不“关心”从何处获取集合或模型的数据。它将通过提供一个开箱即用的RESTful“ajax”解决方案来帮助您,但是如果您想使用其他的解决方案,它不会生气 这允许您查找(或编写)任何要处理服务器交互的插件。看看谷歌和Github 专门用于插座的有 找不到插件,不用担心。我可以准确地告诉你如何写一个(比听起来容易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”时会发生什么。这是“按书”/“开箱即用”行为:
fetch
将实际的获取(ajax、套接字、本地存储,甚至是即时返回json的函数)委托给其他函数()。collection.sync
中的任何函数都必须包含3个参数:
创建
(用于创建),操作:读取
(用于获取),删除
(用于删除),或更新
(用于更新)=CRUD李>
- 成功:当数据“就绪”时调用的回调。这是
感兴趣的回调,因为此时它接管并完成它的任务。唯一的要求是collection#fetch
将以下第一个参数传递给它sync
:返回的实际数据响应
collection#sync
完成它的工作时,collection#fetch
就会重新接管(将回调传递给success),并执行以下漂亮的步骤:
set
或reset
(出于这些目的,它们大致相同)set
完成时,它会在向世界广播的集合中触发一个sync
事件“哟,我准备好了!!”集合中会发生什么呢。一大堆东西(重复数据消除、解析、排序、解析、删除、创建模型、传播更改和一般维护)。别担心。它有效;)你需要担心的是,你如何才能融入到这个过程的不同部分。你唯一应该担心的两个问题(如果你以奇怪的方式包装数据的话)是
用于分析集合。应该接受来自服务器/ajax/websocket/function/worker/whowknowwhat的原始JSON(或任何格式),并将其转换为对象数组。接收第一个参数resp
(JSON),并应发出一个变异响应以返回。简单的豌豆
。与collection相同,但它接收原始对象(即,假设您迭代collection#parse
)的输出,并拆分出一个“unwrapped”对象李>
离开你的电脑去海滩,因为你完成工作的时间比你想象的要快1/100李>
为了实现您想要的任何服务器系统而不是普通的“ajax请求”,您只需要知道这些 要将主干网与WebSocket集成,请尝试