问题标签 [durandal-navigation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
392 浏览

durandal - 具有相关模块 ID 的 Durandal 子路由器设置

我正在尝试配置 Durandal 子路由。我有一个由父路由器负责的公共部分:

然后子路由器应该负责私有部分。用户登录后,我正在映射子路由器的路由。根据用户类型(管理员、用户),我正在使用适当的路由激活子路由器:

第一次初始化路由器时一切正常,但如果我返回主路由器(登录视图)并执行另一次登录,则子路由器会添加两次相关的 moduleId。

第一次登录后,路由具有 moduleId 'viewmodels/private/ route ',这是正确的,但第二次登录初始化子路由器时,路由具有 moduleId 'viewmodels/private/viewmodels/private/ route '。

什么时候应该:

我无法确定可能导致这种情况的原因。有什么帮助吗?

0 投票
0 回答
1047 浏览

javascript - 除非我将路由器绑定到视图,否则 Durandal 子路由器的 activeItem 不会改变

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

下面是我的代码:

父视图模型:

父视图:

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

0 投票
1 回答
3454 浏览

knockout.js - 导航到同一模块并使用不同数据查看时,Durandal 重新绑定

我的应用程序中有一对视图模型/视图,用于显示不同的数据。显示的数据由一些用户输入生成,并且每组数据的单独路由在路由器上注册。

问题是因为相同的view/viewmodel用于不同的路由,当在它们之间导航时,view-viewmodel之间的绑定没有刷新。

连接到canReuseForRoute回调我设法让 viewModel 刷新,但视图没有刷新。

我尝试cacheVewsrouter绑定上使用,但视图仍未刷新。

导航到使用相同视图/视图模型的不同路由时,如何使路由器/路由组合刷新?

编辑:(更多信息)挂钩binding回调我发现 Durandal 仅在第一次使用模块时绑定视图。如果我尝试使用相同的模块(视图/视图模型)导航到不同的路线,它不会binding再次调用回调。

0 投票
3 回答
2819 浏览

durandal - durandaljs - 导航到按钮点击查看

也许我错过了在 durandal 中导航的要点,但是如果我想在单击按钮时触发视图,这是如何完成的?

我正在将按钮数据绑定到视图模型中的单击功能。但是,当视图模型被加载时,它会立即触发视图重定向。

看法:

视图模型:

0 投票
1 回答
1673 浏览

durandal - durandaljs 路由器:导航:组合完成触发太快

我的问题是:知道子模块何时完全加载并完成合成的最佳方法是什么,以便我可以测试该模块的 html 内容?

我正在尝试编写一些在路由完全完成组合后运行的集成测试。
因此,我构建测试的方式是:
在“导航()”调用之前,我附加:
router.on('router:navigation:composition-complete', callback)
接下来我调用:
router.navigate('parent/child')
我的测试代码在“路由器:导航:组合完成”的回调中

问题是,该路线正在调用子路线。也就是说,父路由指向加载子路由的模块。路由在我的应用程序中运行良好,但是当我在测试中侦听“router:navigation:composition-complete”事件时,该事件在父模块加载后立即触发,甚至在子模块加载之前。
此外,这只发生在第二次测试中。我的意思是,如果我有一个导航到路由的测试,则事件会在子模块正确加载后触发。然后在该测试运行后,如果我在新测试中导航到新路线,以便我可以测试它,该事件仅在父模块加载后立即触发。

那么,我怎样才能正确知道子模块何时完全完成合成,以便我可以测试我的模块的 html 内容?

这是我的路线结构示例,以便更好地了解我看到的问题:

然后在 parent/index.js 我有这个:

因此,如果我调用: router.navigate('parent/child') 它会在 parent/index.js 加载后立即触发 composition-complete 事件,而不是在 parent/viewmodels/child.js 加载时触发。

0 投票
0 回答
530 浏览

durandal - 如何在 durandal 的后退按钮上加载上一个视图

我正在尝试在我的项目中加载视图。我想加载我访问过的上一页,现在单击浏览器的后退按钮后返回上一页。我必须编写一个方法来使用 durandal 的服务加载它吗?

0 投票
1 回答
125 浏览

durandal - 如何定义多个子视图的路由

我正在使用 durandal 进行开发和应用。我的页面中有两个部分具有不同的导航菜单。我正在使用组合来制作这些子视图。但我不确定如何为这些部分定义路线。

0 投票
1 回答
246 浏览

javascript - 从数据库 durandal 加载子路由器

我试图从我的数据库 starterkit 在 durandal 2 中创建子路由但没有成功。

虽然我成功地用静态内容渲染它,如下所示:

但是我一直无法从数据库中动态输出菜单。我做错了什么吗?请在下面查看我的代码

Html 看起来几乎一样。请帮忙

0 投票
1 回答
740 浏览

durandal-2.0 - durandal 2.0 navigateBack() 导致整页刷新

我正在尝试使用 Durandal 2.0.1 使 router.navigateBack 功能正常工作。

我有一个视图模型,可以创建一个我们称之为领导的实体。创建新潜在客户后,我想替换 uri,使其具有编辑潜在客户路线而不是创建潜在客户路线,并在历史记录中替换它。保存后我调用以下函数:

这是我的配置文件中的路线描述

然后当我打电话时

它导航到预期的路线,但总是会导致整个页面刷新。我试图避免整个页面刷新并像往常一样简单地导航。

在 durandal 1.0 中,我曾经只是调用

要完成同样的任务,它会很好地工作。我想知道我是否在这里遗漏了什么。

0 投票
1 回答
826 浏览

durandal-2.0 - Durandal 激活函数中的错误

我一直在努力处理 durandal 的错误。

我发现将用于渲染视图等的大部分逻辑放置在激活函数中是可取的。

这一直很好,直到我注意到一些编程错误导致整个应用程序非常安静地崩溃。即没有写入控制台,没有捕获错误,应用程序只是挂在激活功能上。

这是预期的行为。我应该将我的应用程序的应用程序逻辑移动到其他地方吗?

实际的代码有点尴尬,很多都包含在 jquery 承诺等中。

为了证明我所看到的,我写了以下内容:

除了挂起应用程序之外,它没有向控制台写入任何内容,也没有引发其他明显的错误。

立即发生的事情:

在这种情况下,激活功能会继续进行,但不幸的是也无法跟踪此错误?

我担心我需要找到一种在激活点执行应用程序逻辑的方法,但如果不简单地吞下这些错误,那将很有用。

进行了更多调查并深入研究了Durandal。

错误仍然消失。尽管 Durandal 明显尝试记录错误。我一直在寻找 activator.js 激活功能:

本质上,运行捕获条件并调用系统错误。结果似乎消失在淘汰赛绑定等中。无论如何,有没有让这个错误更明显。现在我坚持在 activator.js 激活函数上放置一个断点。

我正在使用 v2.0.1 的 durandal。