我有一个困惑 -
如果我在websockets (sockjs)
和Backbone
之上实施Marionette
,那么,在我看来,它应该只需要更改Backbone.ajax
函数,以便socket.emit
socket.on
和model.save (or collection.save)
支持model.fetch (or collection.fetch)
。
但是,当我做一些研究时,我发现事实并非如此。我遇到了 -
1. Derick Bailey的文章:
https://lostechies.com/derickbailey/2012/04/19/decoupling-backbone-apps-from-websockets/
甚至没有谈到改变Backbone.ajax
或Backbone.sync
,而是建议事件聚合 - 这是使用websockets的解决方案但是错过了同步模型和集合的全部要点。好吧,它确实讨论了backbone.iobind
,但只提到它作为事件聚合的“替代”方法(但是,这只是我对文章的阅读,我可能错过了一些东西!)。
2. Christopher Keefer的文章:http://artandlogic.com/2014/06/websockets-for-backbone/
它完全符合我的要求(在socket.io上),但它通过改变除{{1}之外的Backbone.sync
的部分来完成工作。 }}!
我的问题是Backbone是否可以通过更改其Backbone.ajax
函数来为sockjs工作?
答案 0 :(得分:1)
如果要更改持久性方法,则应覆盖Backbone.sync
您可以覆盖它以使用其他持久性策略,例如 WebSockets ,XML传输或本地存储。
(强调我的)
Backbone.sync
是您访问持久层的途径。默认情况下,这是使用AJAX处理的,在大多数情况下使用jQuery AJAX。
Backbone.ajax
如果你想使用自定义AJAX函数,或者你的端点不支持jQuery.ajax API,你需要调整一些东西,你可以通过设置Backbone.ajax来实现。
(强调我的)
Backbone.ajax
只是jQuery AJAX的代理:
Backbone.ajax = function() {
return Backbone.$.ajax.apply(Backbone.$, arguments);
}
文档明确说明何时要覆盖Backbone.ajax
。另一个不切实际的例子是当你使用另一个DOM操作库代替jQuery时,它没有内置使用ajax
方法公开的AJAX支持。
Backbone.sync
方法包含假定您正在使用AJAX的代码(它操纵xhr
对象)。那是你应该覆盖的东西。
使用ajax
方法做一些不是ajax的事情甚至没有意义。