1

我正在使用 Backbone.Relational 与 Backbone.Marionette 和 Backbone.ioSync 来同步 socket.io。

更具体地说,我有一个模型A,它通过关系hasMany实例化模式。在加载时,一切都很好:数据已正确初始化和渲染。然后,另一个客户端添加了to的另一个实例。服务器向第一个客户端发送 ping,这导致它调用. 在 fetch 的成功方法中,我调用. fetch 方法只返回关系的 ID 列表,触发on ,导致 Backbone.Marionatte 的集合视图创建项目视图的新实例以显示 new ,这会破坏站点,因为尚未获取新的.BbeesBA.beesA.fetch()A.fetchRelated('bees')beeschangeABB

试图强制 B 的视图渲染与 A 中定义的延迟对象同步,这听起来像是一个复杂的 hack,可能需要处理许多边缘情况。

一种想法是允许fetch接受该silent选项。但是在. change_ _addsuccessfetch

另一个想法是让服务器上下文上的序列化代码感知并在添加新项目时发送整个对象,而不仅仅是 ID。这也是次优的,因为当将整个相同的 B 添加到不同的 A 时,可能会导致不必要的转移。它还给服务器代码增加了很多复杂性,因为上下文需要在整个序列化过程中传播。

关于如何解决这个问题的任何想法或建议?只要可行,我对可能需要更改 Backbone.Marionette 或 Backbone.Relational 的解决方案持开放态度。

4

1 回答 1

0

Marionette 现在有了 Marionette.Async,它可以更轻松地执行异步 fetch 和 fetchRelated 请求。此外,Backbone-Relational 中存在一个错误,它在silent使用wait: true. 有关修复此问题的拉取请求,请参阅https://github.com/PaulUithol/Backbone-relational/pull/153 。

于 2012-07-15T07:37:29.200 回答