Backbone 与 websockets (sockjs)(更改 Backbone.ajax 与 Backbone.sync)
Backbone with websockets (sockjs) (changing Backbone.ajax vs Backbone.sync)
我有一个困惑-
如果我在 Backbone
和 Marionette
之上实现 websockets (sockjs)
,那么,在我看来,它只需要更改 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
,但只提到它作为事件聚合的 "alternative" 方法(但是,这只是我对这篇文章的阅读,我可能错过了一些东西!)。
2. Christopher Keefer 的文章:
http://artandlogic.com/2014/06/websockets-for-backbone/
它完全符合我的要求(在 socket.io 上),但它通过更改 Backbone.sync
的部分内容来完成工作除了 Backbone.ajax
!
我的问题是 Backbone 是否可以通过更改其 Backbone.ajax
功能来为 sockjs 工作?
如果你想改变你的持久化方法,你应该重写Backbone.sync
Backbone.sync
You can override it in order to use a different persistence strategy, such as WebSockets, XML transport, or Local Storage.
(强调我的)
Backbone.sync
是通往持久层的门户。默认情况下,这是使用 AJAX 处理的,在大多数情况下使用 jQuery AJAX.
Backbone.ajax
If you want to use a custom AJAX function, or your endpoint doesn't support the jQuery.ajax API and you need to tweak things, you can do so by setting 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 的事情甚至没有意义。
我有一个困惑-
如果我在 Backbone
和 Marionette
之上实现 websockets (sockjs)
,那么,在我看来,它只需要更改 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
,但只提到它作为事件聚合的 "alternative" 方法(但是,这只是我对这篇文章的阅读,我可能错过了一些东西!)。
2. Christopher Keefer 的文章:
http://artandlogic.com/2014/06/websockets-for-backbone/
它完全符合我的要求(在 socket.io 上),但它通过更改 Backbone.sync
的部分内容来完成工作除了 Backbone.ajax
!
我的问题是 Backbone 是否可以通过更改其 Backbone.ajax
功能来为 sockjs 工作?
如果你想改变你的持久化方法,你应该重写Backbone.sync
Backbone.sync
You can override it in order to use a different persistence strategy, such as WebSockets, XML transport, or Local Storage.
(强调我的)
Backbone.sync
是通往持久层的门户。默认情况下,这是使用 AJAX 处理的,在大多数情况下使用 jQuery AJAX.
Backbone.ajax
If you want to use a custom AJAX function, or your endpoint doesn't support the jQuery.ajax API and you need to tweak things, you can do so by setting 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 的事情甚至没有意义。