为可能制作不佳的标题道歉。 Backbone的新手。
我无法绕过如何处理与视图相关联的路线。基本上我有一个视图(我们称之为ListView
),根据其viewMode
,使用不同的模板呈现ItemViews
。它看起来像这样:
var ListView = Backbone.View.extend({
// Cache a bunch of templates here
viewMode: 'list', // Default is list
render: function() {
switch(this.viewMode) {
case 'list':
// Render ItemView based on list template
break;
case 'gallery':
// Render ItemView based on gallery template
break;
}
// Render all items in list
this.collection.each(function(model, index) {
new ItemView(); // Maybe pass viewMode as a parameter
});
}
});
我的目标是,每当ListView
使用viewMode
“列表”或“图库”时,这应该反映在地址栏中,同样也可以手动输入或点击导致例如 mysite.com/page.html#items/list 或#items / gallery 应呈现相同的结果。
有没有办法自动化这个过程,或以其他方式解决它?
答案 0 :(得分:1)
认为你的路由器会是这样的:
var yourRouter = Backbone.Router.extend({
routes: {
"items/list": "showList",
"items/gallery": "showGallery"
},
showList: function() {
listView.viewMode = "list"
listView.render();
}
showGallery: function() {
listView.viewMode = "gallery"
listView.render();
}
});
然后在您的视图事件中,您可以调用路由器的navigate
方法。这将更新地址栏。
yourRouter.navigate("items/list")