Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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 Durandal子路由器&x27;除非我将路由器绑定到视图,否则s activeItem不会更改_Javascript_Durandal_Single Page Application_Durandal 2.0_Durandal Navigation - Fatal编程技术网

Javascript Durandal子路由器&x27;除非我将路由器绑定到视图,否则s activeItem不会更改

Javascript Durandal子路由器&x27;除非我将路由器绑定到视图,否则s activeItem不会更改,javascript,durandal,single-page-application,durandal-2.0,durandal-navigation,Javascript,Durandal,Single Page Application,Durandal 2.0,Durandal Navigation,我使用durandal为我的一个viewModels设置了一个子路由器。但是,当路由器导航到第二个子路由时,我无法读取路由器的activeModule,除非我还编写了一个与子路由对应的视图。有人能解释一下这里发生了什么吗 下面是我的代码: 父视图模型: define(['plugins/router', 'durandal/app', 'knockout'], function (router, app, ko) { var childRouter = router.createChild

我使用durandal为我的一个viewModels设置了一个子路由器。但是,当路由器导航到第二个子路由时,我无法读取路由器的activeModule,除非我还编写了一个与子路由对应的视图。有人能解释一下这里发生了什么吗

下面是我的代码:

父视图模型:

define(['plugins/router', 'durandal/app', 'knockout'], function (router, app, ko) {

  var childRouter = router.createChildRouter().makeRelative({ moduleId: 'viewmodels/mytest', fromParent: true }).map([
    { route: 'first', title: 'First', moduleId: 'first', nav: true },
    { route: 'second', title: 'Second', moduleId: 'second', nav: true }
  ]).buildNavigationModel();

  return {
    router: childRouter,
    displayName: 'mytest',
    activeModule: ko.computed(function () {
      if (childRouter.activeItem()) {
        return childRouter.activeItem().__moduleId__;
      }
    }),

    activate: function () {
      // Activation code goes here
    },
    canReuseForRoute: function () {
      return false;
    }
  };
});
<section>

  <h2 data-bind="html: displayName"></h2>
  <ul data-bind="foreach: router.navigationModel">
    <li>
      <a data-bind="attr: { href: hash }, html: title"></a>
    </li>
  </ul>

  <!--<div data-bind="router: { transition:'entrance', cacheViews:true }"></div>-->
  <div data-bind="html: activeModule"></div>

</section>
父视图:

define(['plugins/router', 'durandal/app', 'knockout'], function (router, app, ko) {

  var childRouter = router.createChildRouter().makeRelative({ moduleId: 'viewmodels/mytest', fromParent: true }).map([
    { route: 'first', title: 'First', moduleId: 'first', nav: true },
    { route: 'second', title: 'Second', moduleId: 'second', nav: true }
  ]).buildNavigationModel();

  return {
    router: childRouter,
    displayName: 'mytest',
    activeModule: ko.computed(function () {
      if (childRouter.activeItem()) {
        return childRouter.activeItem().__moduleId__;
      }
    }),

    activate: function () {
      // Activation code goes here
    },
    canReuseForRoute: function () {
      return false;
    }
  };
});
<section>

  <h2 data-bind="html: displayName"></h2>
  <ul data-bind="foreach: router.navigationModel">
    <li>
      <a data-bind="attr: { href: hash }, html: title"></a>
    </li>
  </ul>

  <!--<div data-bind="router: { transition:'entrance', cacheViews:true }"></div>-->
  <div data-bind="html: activeModule"></div>

</section>


子视图模型和视图非常无聊。但是,如果我取消注释上面的注释行,那么我将在下一个div中看到预期结果。否则,无论单击第一个模块还是第二个模块,我都只会看到第一个模块。

您点击的路线是什么?如果您在
router.activateRoute
方法中进行调试,然后通过子路由器的
loadUrl
方法,是否有任何
routePattern
处理程序与您的路由匹配?我正确地命中了预期的路由。loadUrl方法也会获得正确的URL,但当loadUrl调用回调以对指令进行排队时,isProcessing()observable对于第二个路由返回true。