fetchRelational после извлечения с использованием Backbone.Relational с Backbone.Marionette и Backbone.ioSync

Я использую 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, если они работают.


person Tony Abou-Assaleh    schedule 09.05.2012    source источник


Ответы (1)


В Marionette теперь есть Marionette.Async, который упрощает выполнение асинхронных запросов fetch и fetchRelated. Кроме того, в Backbone-Relational была ошибка, которая не учитывала параметр silent, автоматически передаваемый магистралью при сохранении объекта с wait: true. См. https://github.com/PaulUithol/Backbone-relational/pull/153 для запроса на включение, чтобы исправить это.

person Tony Abou-Assaleh    schedule 15.07.2012