Я использую Backbone.Relational с Backbone.Marionette и Backbone.ioSync для синхронизации через socket.io.
Точнее, у меня есть модель A
, которая hasMany
экземпляров режима B
через отношение bees
. При загрузке все хорошо: данные инициализируются и отображаются должным образом. Затем другой клиент добавляет еще один экземпляр B
в A.bees
. Сервер отправляет пинг первому клиенту, что заставляет его вызывать A.fetch()
. В успешном методе выборки я вызываю A.fetchRelated('bees')
. Метод fetch возвращает только список идентификаторов для отношения bees
, запуская change
для A
, в результате чего представление коллекции Backbone.Marionatte создает новый экземпляр представления элемента для отображения нового B
, что нарушает работу сайта, поскольку новый B
имеет еще не забрали.
Попытка заставить рендеринг представления B синхронизироваться с отложенным объектом, определенным в A, звучит как сложный хак с вероятным множеством пограничных случаев для обработки.
Одна из идей состоит в том, чтобы разрешить fetch
принимать вариант silent
. Но, вероятно, сложно вызвать события change
и add
в функции success
fetch
.
Другая идея состоит в том, чтобы сделать код сериализации на сервере контекстно-зависимым и отправлять весь объект, а не только идентификаторы, при добавлении нового элемента. Это также неоптимально, поскольку может привести к ненужной передаче целых идентичных B, когда они добавляются к разным A. Это также значительно усложняет серверный код, поскольку контекст должен распространяться на протяжении всего процесса сериализации.
Любые мысли или предложения о том, как подойти к этому? Я открыт для решений, которые могут потребовать изменений в Backbone.Marionette или Backbone.Relational, если они работают.