- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一整天都在苦苦挣扎,无法弄清楚如何在我的基于 Hot Towel 的 (MVC4 SPA) 项目中使用 Durandal 正确创建子路由器。这就是我现在所拥有的:
var routes = [
{ route: '', moduleId: 'home', title: 'Home', nav: 1 },
{ route: 'inventory/index', moduleId: 'inventory/inventory', title: 'Inventory', nav: 2 }];
return router.makeRelative({ moduleId: 'viewmodels' }) // router will look here for viewmodels by convention
.map(routes) // Map the routes
.buildNavigationModel() // Finds all nav routes and readies them
.activate(); // Activate the router
define(['services/logger', 'plugins/router'], function (logger, router) {
var title = 'Details';
var childRouter = router.createChildRouter()
.makeRelative({
moduleId: 'viewmodels/inventory',
fromParent: true
}).map([
{ route: '', moduleId: 'inventory', title: 'Inventory', nav: 3 },
{ route: 'items', moduleId: 'items', title: 'Items', nav: 4 }])
.buildNavigationModel();
var vm = {
router: childRouter,
activate: activate,
title: title
};
return vm;
//#region Internal Methods
function activate() {
logger.log(title + ' View Activated', null, title, true);
}
//#endregion
});
我目前遇到的问题:
我的项目文件是这样组织的:
最佳答案
我的主要问题是,我期望子导航菜单能够显示,而没有在我的 View 或 View 模型中实现子导航。我不知道子导航不是现有导航所固有的。以下是我必须做出的更改。
通过在 router.navigationModel
上添加带有 data-bind
的元素,将我的 inventory.html 文件更改为充当子导航容器,该元素拾取并显示子导航菜单;还包括一个在 router
上带有 data-bind
的元素,它将在最低导航级别拾取叶节点(页面内容):
<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>
注意这里的完全导航 View 实际上涉及 3 个模块。 shell.js 是具有顶级导航的根,然后 inventory.js(例如)将是另一个带有子导航按钮的容器,最后 items.js(例如)将表示 inventory.js 容器中显示的内容。
接下来,我需要更新 inventory.js 以充当容器,并在调用 makeRelative 时指定模块的完全限定路径(我在问题中发布代码后将其删除,作为许多绝望实验之一) );如果你没有正确获取 moduleId,当尝试访问不存在的对象的 router 属性时将会发生 fatal error ,并且如果你运行 IE,调试器给出的消息根本没有帮助:
define(['services/logger', 'plugins/router'], function (logger, router) {
var title = 'Inventory';
var childRouter = router.createChildRouter()
.makeRelative({
moduleId: 'viewmodels/inventory',
fromParent: true
}).map([
{ route: 'items', moduleId: 'items', title: 'Items', nav: 3 }])
.buildNavigationModel();
var vm = {
router: childRouter,
activate: activate,
title: title
};
return vm;
//#region Internal Methods
function activate() {
logger.log(title + ' View Activated', null, title, true);
}
//#endregion
});
接下来,我似乎必须更新根级路由上的哈希值,以避免出现有关找不到“*inventory”路由的错误。我不知道为什么 splat 路线没有为我更好地自动处理;不知怎的,淘汰样本解决了这个问题,但我不能不覆盖哈希:
var routes = [
{ route: '', moduleId: 'home', title: 'Home', nav: 1 },
{ route: 'inventory*inventory', moduleId: 'inventory', title: 'Inventory', hash:"#inventory", nav: 2 }];
最后,我必须重组我的树以将库存文件上移一级:
关于javascript - 如何使用Durandal的createChildRouter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940661/
Nuget 说我已经为我正在检查的项目安装了 Durandal Transitions 包,但是 ~/Scripts/durandal/transitions仅包含默认过渡 entrance.js 其
每次我读到有关 Javascript 的新内容时,我都会阅读有关 Durandal 和 Aurelia 的内容。我在很多博客上听到开发人员要求从 Durandal 升级到 Aurelia 或类似的版本
在我基于 HotTowel 的项目中,我使用 Durandal 1.1.1 进行路由。 我有一个登录路由,如果用户未登录,我想激活该路由。 我的路线配置如下: var routes = [ {
每次我读到有关 Javascript 的新内容时,我都会阅读有关 Durandal 和 Aurelia 的内容。我在很多博客上听到开发人员要求从 Durandal 升级到 Aurelia 或类似的版本
Durandal route 星号的用途是什么?这是来自 the Docs 的示例: route:'knockout-samples*details' 编辑:使用 Durandal 2.0 最佳答案
Durandal 路由中星号的用途是什么?这是来自 the Docs 的示例: route:'knockout-samples*details' 编辑:使用 Durandal 2.0 最佳答案 您引用
我的 Durandal 路由配置如下。 var routes = [ ....... More Routes Here..... { url: 'login', moduleId: '
我正在使用 Durandal 2.0。我有一个搜索 View ,想将所选项目传递到详细信息 View 。我知道如何传递 Id,但由于在这种情况下搜索具有整个对象,因此我想在导航时传递对象。我以为我可以
我搜索如何在撰写数据绑定(bind)上停用转换, 因为我在 chrome 上的内容 html 并不美观而且小错误。 因为我在过渡时有一个滚动水平打印,并且在移动鼠标后消失了。 内容在 iFrame 中
在我的 shell 中,我按照以下方式设置了路线: router.map([ { route: '', title: 'Search', moduleId: 'viewmode
我正在尝试使用 John Papa 的 HotTowel 模板实现 SPA。我可以做多少级的 ko compose 有限制吗? 在它调用的 shell.html 中 在我的事件 View 中,我尝试
我需要帮助在 Durandal 路由器中动态添加/删除路由。我想要的是在用户登录后,我将能够根据登录用户的类型添加或删除特定路线。 我试图从 visibleRoutes/allRoutes 数组中添加
我正在看的文章是Durandal Router . 下 mapAuto ,它说我们可以在 url #/customers/1 中传递 splat 参数.和 activate viewmodel 中的函
我正在查看这些路由信息对象结构的文档,但没有找到任何内容。由于 Durandal 使用其他 JS 库,我不确定它属于什么(也许是 sammy?)。 我面临两个问题:问题 #1 我想在路线信息中使用一个
我有一个现有的 Durandal.js 应用程序,它利用了所有 ES5 功能,但我想将它升级到新的 Aurelia 平台。什么是正确的升级路径?最简单的升级方式是什么?是否有包含升级路径的文档? 最佳
我正在开发 Hottowel 项目,并更新到 Durandal 2.0。我已经关注了Converting from 1.x to 2.0 guide ,但我仍然有一些问题: 1.加载router插件总
在我看来......这种方式的初始路线是通过以下方式定义的: { route: '', moduleId: 'viewmodels/customers', title: 'customers', na
我想知道是否有人在 Durandal.js 上遇到过类似的问题。 我收到间歇性的“未找到 View 。搜索”错误,很难复制,因为只是偶尔发生。 当 createView 函数无法定位 View 时,它
当您在 SPA 代码中的某处遇到脚本错误时,整个应用程序变得完全没有响应并且您无法导航到任何其他页面(视图)。似乎 durandal 只是卡住了! (唯一的出路是点击刷新再次启动SPA) 在 Du
两者有什么区别,什么时候适合使用它们?我已经看过文档,但还没有完全弄清楚。 最佳答案 这两个事件都是 Durandal 生命周期回调的一部分。 activate() 允许新对象执行自定义激活逻辑。 (
我是一名优秀的程序员,十分优秀!