У меня есть последовательность состояний страницы, которая по существу имитирует процесс проверки корзины покупок, например:
var ItemsCollection = Backbone.Collection.extend({
model: ItemModel,
url "/items"
});
var ItemsView = Backbone.View.extend({
// Select item on click event here
});
var ItemsApp = Backbone.View.extend({
// Fetch collection of items and render each ItemsView
});
Когда элемент выбран, я хотел существенно изменить состояние, чтобы отобразить продавцов этого предмета. Архитектура будет выглядеть так:
var SellersCollection = Backbone.Collection.extend({
model: SellersModel,
url "/sellers" // The item ID is stored in a session NOT in the url (So permalinks work)
});
var SellersView = Backbone.View.extend({
// Select item on click event here
});
var SellersApp = Backbone.View.extend({
// Fetch collection of sellers and render each SellersView
});
Итак, учитывая эти два состояния, где находится базовое место для создания экземпляров коллекций продавцов, выборки продавцов и отображения представления?
Я думал о том, чтобы по существу объединить представление SellersApp и представление ItemsApp в одно, служащее своего рода контроллером, который определяет, какое подпредставление отображать и какую коллекцию извлекать. Если я сделаю это таким образом, должен ли я создавать экземпляр ОБЕИХ коллекций в основном пространстве имен приложения и извлекать коллекции при необходимости, или я должен создавать экземпляр каждой коллекции только при вызове соответствующего состояния (url). Я думаю, что последний подход нарушает Закон Деметры.
Как я думаю, что я должен это сделать.
// 1. Instantiate outside the view
var MainApp = Backbone.View.extend({
attributes: {
"page": "items"
},
items: function(){
// Fetch items collection and render view (listenTo used in initialize)
},
sellers: function() {
// Fetch sellers
}
});
Items = new ItemsCollection;
Sellers = new SellersCollection;
Хороший ли это подход? Если это хороший подход, где я должен сообщить MainApp об изменении состояния, т.е. должен ли я явно вызывать метод сбора выборки основного приложения (т.е.
в событии «щелчок» ItemsView, явно объявить ItemsApp.sellers) или я должен используйте прослушиватель в главном представлении приложения, который автоматически прослушивает элемент, который нужно выбрать.
По сути, я ищу альтернативу использованию router.navigate-trigger и использованию маршрутизатора для создания экземпляра каждого представления/коллекции, поскольку я слышал, что это не очень хорошая практика.