问题标签 [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 回答
266 浏览

hottowel - 我如何将 mapUnknownRoutes 重定向到父级

这就是我拥有的 ia 子路由(来自工作 --> index.js)

我如何将其重定向到父级code404

我的文件夹看起来像这样。

错误:

这会起作用,但会破坏页面

0 投票
1 回答
923 浏览

javascript - 刷新现有页面的 Durandal 技术 [view/viewmodel]

我有一个仪表板页面,它显示与特定用户相关的数据,显示在右上角的下拉列表中。

当我选择不同的用户时,仪表板应该重新加载/刷新与该用户相关的数据。

路由器不起作用,因为我导航到它不会重新加载页面的同一页面。另一个技巧是创建一个虚拟页面并从那里重定向回仪表板,但我正在寻找一种更清洁的方法。

0 投票
1 回答
610 浏览

durandal - durandal,在导航期间将参数传递给小部件

我的 SPA 中有几个单例视图,每个视图都包含相同的小部件。

当视图被激活时,我从激活回调中获取一些参数并将其传递给小部件,它工作正常。

但是,如果我第二次导航到视图中(在激活回调中使用不同的参数),小部件的激活方法就不会被引发。

如何将新数据传递给小部件?

我试图使参数可观察并将其订阅到小部件(settings.params.subscribe)并且它有效,但我认为这不是一个好的解决方案。

0 投票
1 回答
132 浏览

javascript - DurandalJS 如何在不渲染页面的情况下进行重定向?

是否可以通过哈希导航到某个页面,然后执行一些逻辑并重定向回来而不呈现新页面/模块,而是刷新我导航的那个页面/模块?

实际上我想要的是做一些逻辑并刷新同一页面而不显示启动画面。

例如,我有简单的 HTML 链接:

在 language.js 中,我有简单的代码在“激活”函数中获取数据:

Buty 我的问题是,在很短的时间内,viewUrl 属性中的 loading.html 正在显示。之后,我将返回上一页。

我想阻止 loading.html 页面呈现。怎么做?我正在浏览 Durandal 文档并在谷歌中搜索,但找不到任何有用的东西。

.then(function () { return false; });

上面的代码是我尝试从激活函数返回 false 并阻止页面呈现,但不起作用:(

编辑

我想防止设置/加载渲染和刷新我导航的上一页。

0 投票
1 回答
878 浏览

durandal - Durandal 路由器 - 如何在路由定义中将视图定义为模式

如何在单击时直接将视图声明为模态?

我的路线定义是:

我想在当前屏幕上打开“contactus”模块作为模式对话框 - 不想导航到另一个视图。

不知道如何实现。非常感谢您的建议。

0 投票
2 回答
865 浏览

google-analytics - 如何在 Hot Towel durandal SPA + typescript 中使用谷歌通用分析

我正在基于热毛巾模板构建应用程序。Google Analytics 遇到问题。我对此完全陌生,这是我到目前为止所做的:

1)在谷歌分析帐户中注册

2)在我粘贴的结束标记之前的 index.cshtml 文件中:

3) 将 TypeScript 定义从 nuget 添加到 shell.ts 文件(我将其重写为 TypeScript)

版本为 0.0.9。

后期激活方法:

但无法编译文件 - ga.d.ts 中的 ga 对象定义没有声明任何函数 - 只有属性。

我做了一些研究并找到了可行的解决方案:

但它似乎适用于以前的谷歌分析版本——不是最新的。

试图使用站点http://petermorlion.blogspot.com/2014/04/using-google-analytics-in-durandal-spa.html的信息但没有成功 - ga.d.ts 中的 ga 对象定义没有t 没有声明任何函数。

任何帮助表示赞赏。

0 投票
1 回答
294 浏览

single-page-application - Durandal 2 升级重定向问题

您好,感谢您查看我的问题。

我一直在迁移我的 SPA 应用程序以使用 Durandal 2.0 库,遵循我的救世主John Papa的明智建议。现在我已经完成了升级过程,当我尝试使用我的菜单按钮进行导航时,我发现了一个奇怪的行为(或缺乏行为)。具体来说,没有发生的是浏览器没有重定向到新页面。有趣的是,浏览器地址栏已正确填充,如果我只需单击地址栏并按回车键(硬重新加载),就会按预期重定向。

我环顾四周,这不是由于我在其他地方看到其他讨论的任何安全检查/重定向引起的。Durandal 代码未修改。

页面上的 js 可能非常简单:

所以我的猜测是它在我的 durandal 配置中。

主.js:

外壳.js:

config.js 中的路由

0 投票
1 回答
124 浏览

javascript - DurandalJS - 在页面根目录上强制执行完整的激活周期(又名:在 app.setRoot() 上触发“停用”)

[编辑]这里还有 Google Groups 主题。随着我了解更多,我会尽量保持更新。

根据Durandal 文档,页面根视图模型仅实现有限的激活器功能。具体来说,它指出:

……

4)当你调用 app.setRoot 时,你的根模块上会使用一个(有限的)激活器。

注意:案例 4 有点不同,因为它只强制执行 canActivate 和 activate 回调;而不是停用生命周期。要启用它,您必须自己使用完整的激活器(案例 1-3)。

这意味着与所有嵌套页面 ViewModel 不同,根视图模型没有机会处理它们的垃圾对象并进行清理。

当我调用 app.setRoot() 时,在这些对象上触发 canDeactivate 和 deactivate 的友好方式是什么?我也许可以手动执行此操作,但我需要对根 ViewModel 的引用,它不一定在范围内。

我考虑过创建一个 pub/sub 系统,尽管我对此感到厌倦,因为它有可能导致更多的内存问题和清​​理复杂性而不是减少它。

我考虑过分叉这个项目,尽管这会带来一些沉重的开销,因为从那时起我必须维护我的分叉。

[编辑]

例子:

假设我要启动我的应用程序并将外壳设置为“主”外壳。

稍后,我希望切换到新的外壳。也许是不同的布局、全屏或不同的皮肤。

这将导致外壳“帐户”检查和/或触发激活和 canActivate,但它不会检查外壳“主”中的 canDeactivate 和停用。我有清理逻辑,希望在这些消失时运行。我怎样才能做到这一点?

[编辑]

处理的 durandal 代码部分这是一个位于模块 'durandal/app' 下的本地函数 setRoot() finishComposition() 它看起来像这样

也许有办法解决这个问题?如果可能的话,我想避免编辑 Durandal 的核心。

0 投票
1 回答
286 浏览

durandal - 是否可以检测用户是否可以返回?

基本上,我需要在我的应用程序上复制浏览器后退按钮(我不想要它,但我需要这样做:/)

在 durandal 上,我可以通过调用导航返回router.navigateBack();。但并不总是有一个页面返回(浏览器返回按钮在没有时被禁用)。那么,是否有可能检测是否有前一页?

我正在考虑创建一个简单的计数器,当用户导航时它会递增,当它点击我的“后退”按钮时会递减,但我现在不知道如何检测用户点击了浏览器后退按钮。如果有某种方法可以知道没有任何上一页,那就太好了。

0 投票
0 回答
129 浏览

durandal - 如何使 durandal 路线相对

我正在基于用户单击构建动态路线,在用户单击按钮后重新构建导航模式,该按钮确定了将用户导航到的路线。在视图模型中使用导航时如何使 durandal 路线相对。当我使用 router.navigationmodel 时,所有路由都配置为相对于当前路由,这工作正常。但是当我尝试在视图模型中使用导航时,这会删除地址栏中的当前路线并将其替换为我正在导航到的路线的字符串。例如:使用 navigationmodel 路线 -> 'car' 路线显示 -> 'index#car' -> 这很好

但在视图模型中,使用 navigate('car') 调用汽车,路线变为 -> '/car';

如果有人可以提供解决方案,我将不胜感激。