Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干-在子例程'之前执行路由功能;s函数_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干-在子例程'之前执行路由功能;s函数

Javascript 主干-在子例程'之前执行路由功能;s函数,javascript,backbone.js,Javascript,Backbone.js,骨干路由器中有以下代码,是否可以确保当用户直接导航到#test/map或#test/images时,首先执行连接到路由#test的功能 invokeTest函数创建一个父视图,该父视图具有一个容器,子视图“映射”和“图像”在该容器中呈现。因此,我需要确保在跳到渲染子视图之前已渲染基本布局视图 var Workspace=Backbone.Router.extend({ 路线:{ “测试”:“调用测试”,测试 “测试/映射”:“invokeTestMap”,/#测试/映射 “测试/图像”:“调用

骨干路由器中有以下代码,是否可以确保当用户直接导航到
#test/map
#test/images
时,首先执行连接到路由
#test
的功能

invokeTest
函数创建一个父视图,该父视图具有一个容器,子视图“映射”和“图像”在该容器中呈现。因此,我需要确保在跳到渲染子视图之前已渲染基本布局视图

var Workspace=Backbone.Router.extend({
路线:{
“测试”:“调用测试”,测试
“测试/映射”:“invokeTestMap”,/#测试/映射
“测试/图像”:“调用估计”//#测试/图像
},
invokeTest:function(){
//渲染库布局
log(“已执行测试功能”);
},
invokeTestMap:function(){
//使用使用基本布局模板创建的元素渲染地图视图
log(“执行映射函数”);
},
invokeTestImages:function(){
//使用使用基本布局模板创建的元素渲染图像视图
log(“执行图像函数”);
}
});您只需执行以下操作:

  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");
  },
简单地说,您需要将要重用的逻辑放在函数中并调用它


如果您必须大规模地执行此操作,那么在路由器的
初始化
中,您可以使用正则表达式识别父子关系,并将子回调更新为包装父回调的函数。(或者你可以更深入地研究路由器-似乎有一些插件试图解决类似的问题,比如。

我使用
初始化
方法来渲染基本布局,它工作得很好,但现在我有了登录视图,所以我不能再使用这种方法了。你的第二个建议似乎是可行的,有了路由器有一个对基本布局视图的引用,并且只有在它不存在的情况下才创建它,这有意义吗?@randomguy04是的,这就是我在routerSo中看到的任何视图初始化的一般方式。我这样做,效果很好,但是我有点担心维护,因为我必须调用这个新方法来检查布局存在于依赖于它的每个视图中,仅供参考,我不能在
execute
方法(在路线导航之前执行)中使用它,因为我的应用程序中并非所有视图都需要此baselayout,并且有一个登录视图,这表示您准确地回答了我的问题,谢谢!