Как и в большинстве вещей Backbone.js, вы не получите «правильный» ответ на этот вопрос, но я могу поделиться тем, как я это делаю.Как с моделями, так и с представлениями, я обычно следую этим рекомендациям:
Представления и модели должны создаваться компонентом, который за них отвечает.Для моделей или представлений с четкими родительскими / дочерними отношениями родительская модель должна создаваться, как правило, методом initialize()
.
Родители должны связываться с дочерними событиями во время создания экземпляра.
Родители должны «знать» о детях и при необходимости вызывать дочерние методы - я бы обычно использовал этот метод вместо запуска дочернего события, так как он более явный.Я стараюсь держать детей независимыми от своих родителей, общаясь вверх через события.Так что да, глубоко вложенные модели будут взаимодействовать через цепочки событий.
Я иногда .set()
дочерние элементы в качестве атрибутов Backbone, но обычно просто используют простые атрибуты Javascript (например, this.child
).Это зависит от контекста.Использование атрибутов Backbone обеспечивает change
событий, поэтому, если вам необходимо отслеживать изменения дочерних элементов, используйте их.Атрибуты магистрали также дают вам возможность устанавливать во время создания экземпляра, например, var myModel = new Model({ other: otherModel })
- но поскольку родители обычно создают экземпляры своих детей, это действительно не применимо в этом случае, и я обычно использую этот шаблон для неиерархических отношений модель-модель,В большинстве случаев я устанавливаю дочерние элементы как простые атрибуты Javascript.