我页指出,本质上是一样的购物车结账过程中,像这样的序列:如何正确使用骨干的意见和路由器
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视图基本结合为一个控制器,用于确定要渲染哪个子视图以及要获取哪个集合。如果我这样做,是否应该在主应用程序名称空间中实例化BOTH集合并在需要时获取集合,或者是否应仅在调用相应状态(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'click'中的
,显式声明ItemsApp.sellers),还是应该使用主应用程序视图上的侦听器,可自动侦听要选择的项目。
我基本上寻找替代使用router.navigate - 触发器和使用路由器实例化每个视图/集合,因为我听说这不是好的做法。
我试图找到正确的解决方案,以避免使用路由器的内置触发器:真正的方法。一直未能找到一个好例子。 – kevin
您是否想要将内联列表中的卖家展示为展开视图,或者在选择项目时更改整个页面? –
我宁愿让它充当一个完全独立的状态/视图。所以它就像您点击卖家页面上的固定链接一样,其中销售者基于服务器端存储的会话项目。 – kevin