@likejavascript

Как правильно взаимодействовать с моделями и коллекциями в Backbone?

Есть задача реализовать на Backbone таблицы заказа товаров. Вроде бы задача не сложная, но проблема наступает тогда, когда необходимо с ними взаимодействовать. Вот примерная структура того, планируется сделать:
Document
     |- OrderList   
            |- Order
            |      |- OrderTablesList
            |              |- OrderTable
            |- Order
                  |- OrderTablesList
                          |- OrderTable

Краткое описание, что есть что:

Document (Model) - данные документа
OrderList (Collection) - список заказов
Order (Model) - данные заказа
OrderTablesList (Collection) - список таблиц заказов
OrderTable (Model) - модель таблицы заказа.

Вот вопросы, которые меня интересуют:

1. Как правильно структурировать все эти сущности в Backbone моделях и коллекциях, и допускается ли хранение в представлении одновременно и модели и коллекции (например для реализации Order и OrderTablesList).

2. Как правильно отправлять события по цепочке вверх (что-то типа всплытия), например если мне из TableTable необходимо передать какое-то событие в Order и как-то на него среагировать, но только именно в родительский Order.

Спасибо!
  • Вопрос задан
  • 3349 просмотров
Пригласить эксперта
Ответы на вопрос 4
k12th
@k12th
console.log(`You're pulling my leg, right?`);
1. В вьюхе можно передать много коллекций и моделей, но по факту удобней работать, когда вьюха отвечает за отображение одной бизнес-сущности. Чтобы это решить, используются вложенные вьюхи.
2. При инстанцировании TableTable надо передавать в него ссылку на родителя.

Чтобы такую ветвистую структуру (кстати, нужна ли она на самом деле?) как-то укротить, можно поискать какой-нибудь плагин для вложенных моделей и коллекций, например такой.
Ответ написан
Комментировать
@artemf
Для таких целей можно сделать менеджер событий и через него организовать взаимодействие между вьюхами.

Собственно, сам менеджер:
var vent = _.extend({}, Backbone.Events);

Так можно вызвать событие:
vent.trigger("eventName", this.model);

Так можно подписаться:
vent.bind("eventName", this.doSomething);

Подробный пример можно здесь посмотреть
lostechies.com/derickbailey/2011/07/19/references-...
Ответ написан
@artemf
@likejavascript У вас OrderTable и Order это модели, верно? Можно пример кода что вы хотите связать?
Ответ написан
mainameiz
@mainameiz
Full-stack web-developer
Рекомендую Marionettejs. Библиотека содержит в себе много best practices мира backbone и является его логичным продолжением. Удобно огранизована работа с вложенными вьюшками, есть готовые решения для рендеринга коллекций и иерархий (как раз то что вам нужно).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы