Лучший образец, чтобы модели слушали вложенные модели и коллекции? - PullRequest
9 голосов
/ 04 октября 2011

Используя Backbone.js, каков наилучший шаблон, чтобы модели прослушивали все свои вложенные модели и коллекции до конца?

Должен ли я поместить вложенные модели / коллекции в атрибуты?Должен ли я создавать родительские отношения и инициировать события вручную?

Ответы [ 2 ]

14 голосов
/ 04 октября 2011

Как и в большинстве вещей Backbone.js, вы не получите «правильный» ответ на этот вопрос, но я могу поделиться тем, как я это делаю.Как с моделями, так и с представлениями, я обычно следую этим рекомендациям:

  • Представления и модели должны создаваться компонентом, который за них отвечает.Для моделей или представлений с четкими родительскими / дочерними отношениями родительская модель должна создаваться, как правило, методом initialize().

  • Родители должны связываться с дочерними событиями во время создания экземпляра.

  • Родители должны «знать» о детях и при необходимости вызывать дочерние методы - я бы обычно использовал этот метод вместо запуска дочернего события, так как он более явный.Я стараюсь держать детей независимыми от своих родителей, общаясь вверх через события.Так что да, глубоко вложенные модели будут взаимодействовать через цепочки событий.

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

3 голосов
/ 04 октября 2011

Мне очень нравится ответ @nrabinowitz. он раскрыл все правильные детали.

просто хотел отказаться от идеи использовать что-то вроде Backbone.Relational, которая обрабатывает все эти вещи для вас: https://github.com/PaulUithol/Backbone-relational

...