在骨干路由器中使用以下代码,是否可以确保当用户直接导航到#test/map
或#test/images
时,将执行附加到路由#test
的功能第一λ
invokeTest
函数创建一个父视图,其中包含渲染子视图“map”和“images”的容器。所以我需要确保在跳转渲染子视图之前已经渲染了基本布局视图。
var Workspace = Backbone.Router.extend({
routes: {
"test": "invokeTest", // #test
"test/map": "invokeTestMap", // #test/map
"test/images": "invokeTestImages" // #test/images
},
invokeTest: function() {
//render base-layout
console.log("test function executed");
},
invokeTestMap: function() {
//render map view using element created with the base layout template
console.log("Map function executed");
},
invokeTestImages : function(){
//render images view using element created with the base layout template
console.log("images function executed");
}
});
现在我只获取子视图的控制台日志,从不调用root函数。
答案 0 :(得分:1)
你可以这样做:
invokeTest: function() {
//render base-layout
createBaseLayout();
console.log("test function executed");
},
invokeTestMap: function() {
createBaseLayout();
//render map view using element created with the base layout template
console.log("Map function executed");
},
invokeTestImages : function(){
createBaseLayout();
//render images view using element created with the base layout template
console.log("images function executed");
}
或者你可以像
那样做invokeTestMap: function() {
this. invokeTest();
//render map view using element created with the base layout template
console.log("Map function executed");
},
简单地说,您需要将逻辑放在函数中重用并调用它。
如果必须大规模地执行此操作,则在路由器的initialize
中,您可以使用正则表达式识别父子关系,并将子回调更新为包装父回调的函数。 (或者你可以更深入地进入路由器 - 似乎有一些插件试图解决像backbone.subroute这样的类似问题。