我有一系列页面状态,它们基本上模仿了购物车结帐过程,如下所示:
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 更改状态 - 即我应该显式调用主应用程序的 fetch 集合方法(即
在 ItemsView 'click' 事件中,显式声明 ItemsApp.sellers)还是应该使用监听器在自动侦听要选择的项目的主应用程序视图上。
我本质上是在寻找使用 router.navigate 的替代方法 - 触发器并使用路由器来实例化每个视图/集合,因为我听说这不是一个好习惯。