Javascript 如何使用Durandal';创建儿童路由器

Javascript 如何使用Durandal';创建儿童路由器,javascript,asp.net-mvc-4,durandal,hottowel,Javascript,Asp.net Mvc 4,Durandal,Hottowel,在我的基于热毛巾的(MVC4 SPA)项目中,我一整天都在努力想如何正确地使用Durandal创建一个儿童路由器。这就是我目前的情况: shell.js inventory.js 我目前面临的问题是: 当我点击库存视图时,它会被激活两次 虽然右上角出现了一些空的三维圆角矩形,但没有更多的导航选项可见。。。我不确定这是一个没有消失的进度条还是某个导航元素失败了 我的项目文件的组织方式如下: 我的主要问题是,我希望在视图或viewmodel中没有实现子导航的情况下显示子导航菜单。我不知道子导航不是现

在我的基于热毛巾的(MVC4 SPA)项目中,我一整天都在努力想如何正确地使用Durandal创建一个儿童路由器。这就是我目前的情况:

shell.js inventory.js 我目前面临的问题是:

  • 当我点击库存视图时,它会被激活两次
  • 虽然右上角出现了一些空的三维圆角矩形,但没有更多的导航选项可见。。。我不确定这是一个没有消失的进度条还是某个导航元素失败了
  • 我的项目文件的组织方式如下:


    我的主要问题是,我希望在视图或viewmodel中没有实现子导航的情况下显示子导航菜单。我不知道子导航不是现有导航的固有特性。以下是我必须做出的改变

    通过在
    router.navigationModel
    上添加带有
    数据绑定的元素,将my inventory.html文件更改为充当子导航容器,该元素将拾取并显示子导航菜单;还包括
    路由器上带有
    数据绑定
    的元素,该元素将在最低导航级别拾取叶节点(页面内容):

    <section>
        <header>
        <h2 class="page-title" data-bind="text: title"></h2>
        <nav class="pull-left">
            <ul class="nav nav-pills nav-stacked" data-bind="foreach: router.navigationModel()">
                <li><a data-bind="    css: { active: isActive }, attr: { href: hash }, text: title" 
                href="#"></a></li>
            </ul>
        </nav>
        </header>
        <section id="inventoryPane" data-bind="router: { transition: 'entrance', cacheViews: true }"></section>
    </section>
    
    接下来,我似乎必须更新根级路由上的哈希,以避免出现“*inventory”路由找不到的错误。我不知道为什么splat路线不能更好地自动为我处理;不知何故,淘汰样本绕过了这个问题,但我无法不重写哈希:

    var routes = [
        { route: '', moduleId: 'home', title: 'Home', nav: 1 },
        { route: 'inventory*inventory', moduleId: 'inventory', title: 'Inventory', hash:"#inventory", nav: 2 }];
    
    最后,我必须重新构建我的目录树,将库存文件上移一级:


    我的主要问题是,我希望在视图或viewmodel中没有实现子导航的情况下显示子导航菜单。我不知道子导航不是现有导航的固有特性。以下是我必须做出的改变

    通过在
    router.navigationModel
    上添加带有
    数据绑定的元素,将my inventory.html文件更改为充当子导航容器,该元素将拾取并显示子导航菜单;还包括
    路由器上带有
    数据绑定
    的元素,该元素将在最低导航级别拾取叶节点(页面内容):

    <section>
        <header>
        <h2 class="page-title" data-bind="text: title"></h2>
        <nav class="pull-left">
            <ul class="nav nav-pills nav-stacked" data-bind="foreach: router.navigationModel()">
                <li><a data-bind="    css: { active: isActive }, attr: { href: hash }, text: title" 
                href="#"></a></li>
            </ul>
        </nav>
        </header>
        <section id="inventoryPane" data-bind="router: { transition: 'entrance', cacheViews: true }"></section>
    </section>
    
    接下来,我似乎必须更新根级路由上的哈希,以避免出现“*inventory”路由找不到的错误。我不知道为什么splat路线不能更好地自动为我处理;不知何故,淘汰样本绕过了这个问题,但我无法不重写哈希:

    var routes = [
        { route: '', moduleId: 'home', title: 'Home', nav: 1 },
        { route: 'inventory*inventory', moduleId: 'inventory', title: 'Inventory', hash:"#inventory", nav: 2 }];
    
    最后,我必须重新构建我的目录树,将库存文件上移一级:


    检查将shell.js中的显式路由
    库存/索引
    更改为splat路由
    库存/索引/*是否会有所不同。请参阅@raineraspirit,它消除了对详细信息视图的额外激活,但控制台日志随后会报告“log:Route'*未找到任何内容”(我将错误报告代码更改为
    system.log('Route\''+coreFragment+'\'未找到”);
    因此我对发生的情况有所了解)。仅供参考,3d矩形是您删除字体的地方,但不是显示shell中导航更改的微调器对象。如果将显式路由
    库存/索引
    更改为splat路由
    库存/索引/*shell.js中的任何内容都会产生影响,请检查。请参阅@raineraspirit,它消除了对详细信息视图的额外激活,但控制台日志随后会报告“log:Route'*未找到任何内容”(我将错误报告代码更改为
    system.log('Route\''+coreFragment+'\'未找到”);
    因此我对发生的情况有所了解)。仅供参考,3d矩形是您删除字体的地方,但不是显示shell中导航更改的微调器对象
    var routes = [
        { route: '', moduleId: 'home', title: 'Home', nav: 1 },
        { route: 'inventory*inventory', moduleId: 'inventory', title: 'Inventory', hash:"#inventory", nav: 2 }];