#javascript #backbone.js
#javascript #backbone.js
Вопрос:
Я надеюсь получить ваши общие идеи о том, как использовать вложенные модели и представления с backbone.js .
Допустим, у вас есть несколько диалоговых окон, и в каждом диалоговом окне есть несколько вкладок. Определенная вкладка может повторно использоваться более чем в одном диалоговом окне. Каждая вкладка очень отличается, и вы можете динамически добавлять новую вкладку в диалоговое окно.
Мне кажется логичным иметь разные представления для каждой вкладки. Кроме того, диалоговое окно должно быть представлением. Я просто немного не понимаю, как модели и представления сочетаются друг с другом.
Это мой главный вопрос:
Если родительский вид хочет отображать дочерние представления, ему, вероятно, нужно сделать что-то вроде:
var childView = new ChildView();
А затем используйте jQuery для
this.$("#listOfChildViews").append(childView.el);
Чтобы убедиться, что список очищен перед добавлением, нам нужно
this.$("#listOfChildViews").html("");
Является ли это предпочтительным способом сделать это? Мне кажется немного плохим из-за того, что я вырываю весь список, а затем создаю все новые объекты и добавляю их туда все сразу. Возможно, было бы лучше, если бы не было функции ‘render’ как таковой, а скорее ‘renderInitially’, а затем просто ‘add’ (для добавления новых дочерних представлений).
Извините, это не слишком связно!
Комментарии:
1. Не забудьте отменить привязку всех вложенных представлений.
Ответ №1:
Ник,
Я думаю, вам следует использовать возможности базовых моделей.
Создайте модель диалога (или, может быть, TabContainer, поскольку диалог больше похож на концепцию представления). В каждом диалоговом окне есть набор вкладок (вкладка снова находится во вселенной представлений).
При первоначальном рендеринге в диалоговом окне отображается весь диалог.коллекция вкладок, каждая в TabView.
Затем в диалоговом окне вы можете прослушивать события из коллекции вкладок диалоговой модели (добавить, удалить, сбросить) и добавлять / удалять только те представления, которые соответствуют измененным элементам.
Вы должны сами создавать функции, которые добавляют / удаляют представления. Функция add создаст и отобразит представление для добавленной вкладки и добавит его в this .$(«#listOfChildViews»).
Надеюсь, это поможет.
Комментарии:
1. Спасибо за ваш ответ, Дира! Мне нравятся ваши идеи. Пара более конкретных вопросов… Поскольку DialogView имеет модель диалога, а модель диалога имеет эту коллекцию вкладок, не будет ли модель диалога ссылаться на представления? Мне это кажется нормальным, но нормально ли это?
2. Другими словами, ссылки идут: DialogView> DialogModel> TabCollection> TabView> TabModel — этот тип дизайна в порядке или есть какая-то большая проблема, которую я упускаю?
3. ссылки идут: DialogModel -> TabsCollection -> TabModel. DialogView -> DialogModel. TabView -> TabModel. Представления о моделях, модели не знают о представлениях. Или у вас может быть DialogView -> TabsCollection, TabView -> TabModel. Вы должны найти другие имена для TabModel, которые зависят не от того, как отображается эта информация, а от того, какую информацию она содержит.