是否可以将子路由器添加到特定视图?让我们说我有一个适用于多辆汽车的Backbone应用程序。现在,我的路由器看起来像这样
carRouter = Backbone.Router.extend({
routes: {
'': 'index'
'contact' : 'contact'
':car': 'car',
':car/gallery' : 'cargallery',
':car/specs' : 'specs',
':car/infos' : 'infos',
'about: 'aboutPage'
}
car: function(){
// do this
},
cargallery: function(){
// do this
},
specs: function(){
// do this
},
infos: function(){
// do this
}
...etc
});
这种方法,显然会使整个页面呈现,我基本上想要避免。例如,当我点击“gallery”和“specs”来回时,整个页面会在每次点击时重新渲染。
那么,是否可以做类似的事情:
routes: {
'contact' : 'contact'
':car': 'car',
'about: 'aboutPage'
},
car: function(){
// new router containing
// ':car/gallery' : 'cargallery',
// ':car/specs' : 'specs',
// ':car/infos' : 'infos',
},
}
然后,在Car页面上,我会在菜单(图库,规格,信息)中有3个标签,它们会加载特定汽车的型号/集合,而不会重新渲染页面?
感谢任何帮助/建议!
答案 0 :(得分:0)
您可以使用事件,Backbone触发器和自定义EventHandler对象完成此操作。
CarView中的事件哈希:
events : {
"click .spec" : "showSpecs",
"click .gallery" : "showGallery",
"click .info" : "showInfo",
},
//Invoked when you click the show specs tab.
showSpecs : function(event) {
//Say that EventBus is your custom event handler
event.preventDefault();
MyApp.EventBus.trigger("show:spec",payload);
},
showGallery : function(event) {
event.preventDefault();
MyApp.EventBus.trigger("show:gallery",payload);
}
....
在MyApp.EventBus中:
_.extend(MyApp.EventBus,Backbone.Events);
MyApp.EventBus.showGallery = function(payload) {
// payload is an optional data that you can get from the triggered view
// Fetch your models or collection
// Instantiate the corresponding view and pass your data(models/collections) to it.
// Update the url to reflect the new view so that if you hit refresh you
// come to the same tab.
MyApp.router.navigate("/your-url",{trigger:false});
}
MyApp.EventBus.on("show:gallery",showGallery);
还在路由器中添加一个方法,可以处理选项卡的刷新。