使用backbone.js的非RESTful后端

时间:2014-07-16 00:20:53

标签: rest backbone.js websocket

我将backbone.js评估为一个潜在的javascript库,用于一个应用程序,该应用程序将有几个不同的后端:WebSocket,REST和第三方库生成JSON。我已经阅读了一些观点,认为backbone.js可以与RESTful后端完美配合,只要这个api是由书中的'并遵循适当的http verbage。有人可以详细说明这意味着什么吗?

另外,让backbone.js连接到WebSockets有多麻烦?最后,将backbone.js模型与返回JSON的函数集成是否有任何问题 - 换句话说,数据模型是否总是需要通过REST提供?

1 个答案:

答案 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”时会发生什么。这是“按书”/“开箱即用行为”的行为:

  1. collection#fetch由用户(您)触发。 fetch将委托ACTUAL获取(ajax,套接字,本地存储,甚至是立即返回json的函数)到其他函数(collection#sync)。无论collection.sync中的任何函数必须采用3个参数:
    1. 操作create(用于创建),操作:read(用于提取),delete(用于删除)或update (用于更新)= CRUD。
    2. 上下文(此变量) - 如果您不知道这是做什么的,请不要担心,现在不重要
    3. 选项 - 其中da magic是。我们只关心1个选项
      • success:当数据“准备就绪”时调用的回调。这是collection#fetch感兴趣的回调,因为那是它接管并做它的事情。唯一的要求是sync传递了以下第一个参数
      • response:它返回的实际数据
    4. 现在 必须返回成功回调函数,该函数在获取数据时执行。这个功能是它负责的是
  2. 每当collection#sync完成这件事时,collection#fetch都会收回(将该回调传递给成功)并执行以下漂亮的步骤:
    1. 致电setreset(出于这些目的,他们大致相同)。
    2. set完成时,它会触发向世界广播的sync事件“我准备就绪!!”
  3. 那么set会发生什么。很多东西(重复数据删除,解析,排序,解析,删除,创建模型,传播更改和一般维护)。别担心。它有效;)你需要担心的是你如何能够进入这个过程的不同部分。你应该担心的唯一两个(如果你用奇怪的方式包装数据)
    1. collection#parse用于解析集合。应该接受来自server / ajax / websocket / function / worker / whoknowwhat的原始JSON(或任何格式)并将其转换为对象的ARRAY。接收第一个参数resp(JSON)并且应该为返回吐出一个变异的响应。容易腻。
    2. model#parse。与集合相同,但它接受原始对象(即想象您迭代collection#parse的输出)并拆分“未包装”对象。
  4. 下车,然后前往海滩,因为你完成工作的时间是你认为需要的时间的1/100。
  5. 为了实现您想要的任何服务器系统代替vanilla“ajax请求”,您需要知道的全部内容。