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

javascript - Durandal 空/空路线

我有一个主要/详细的情况。我想使用一个子路由器,以便我可以(a)充分利用历史模块并(b)仅触发孩子的入口转换。这是我的设置:

Shell.js

用户.js

当我导航到#/users/5它时,它工作得很好。但是,当我#/users按预期导航到 时,它会触发一条未找到的路线,取消导航,然后将我返回到#/users/5。当找不到路由时,我应该如何配置它以禁用子视图?理想情况下,我想要这样的东西:

用户.js

路由器将成功导航到 '' 路由,但 null 参数将指示它简单地清空路由器绑定处理程序。

0 投票
1 回答
818 浏览

asp.net-mvc-4 - 如何处理 Durandal MVC 路由?

我已经用 durandal 介绍了 mvc 区域概念

我的层次结构是

我有根据我的网址到该区域的路线。例如,本地主机/博客

我的路线将是:

当我尝试导航到 localhost/blog 时,它会调用正确的控制器并正确呈现。当 durandal 路由发生时博客被排除。所以我的路由 url 无法获取控制器。

以下路由抛出 404 异常,因为它忽略了路由 url (localhost/social/home) 中的博客

请告诉我,如何解决这个问题。是否可以在所有路线和 app.set 中包含区域名称

0 投票
1 回答
265 浏览

durandal - DurandalJS 导航事件

我有一个 Durandaljs 应用程序。我想在 shell 视图中有一个应该隐藏的后退按钮,这取决于现在激活哪个视图。在 shell viewmodel 中检测导航事件以更改后退按钮可见性状态的最简单方法是什么?

0 投票
1 回答
599 浏览

jquery - 加载为 View 还是 ViewModel?

使用 Durandal 2.0.1、Knockout 3.0.0、RequireJS 2.1.10。

以下是背景资料,只是铺垫:

我有一个关于是否将子项加载为视图或视图模型的基本问题。我正在尝试遵循 Durandaljs 网站上打印的设计。我有一个 index.cshtml 页面,其中有一个名为 applicationHost 的 div 元素,它使用 data-main="App/main" 作为 index.cshtml 上的脚本标记的一部分加载 shell.html。

我正在尝试模块化我的标记,所以在 shell.html 中,我有一个 div 加载 header.html 使用:

在 header.html 中,我有另一个 div 无法成功加载 guestSummary.html。

guestSummary (guestSummary.js) 的 ViewModel 检索数据并显示一些客人感兴趣的统计数据,我正在尝试使用 Knockout 将其绑定到 guestSummary.html。

由于 guestSummary.html 中的控件需要数据查找和绑定,我想我需要使用以下代码(在 header.html 中)加载 guestSummary.html:

当我尝试这样做时,我收到以下错误消息(来自 Google Chrome 开发人员工具中的控制台选项卡),“未捕获的错误:无法加载组合模块(viewmodels/guestSummary)。详细信息:模型未定义”。

查看 Durandaljs 网站,它说:“我们的导航应用程序中的每个页面都由一个视图和一个视图模型组成。一旦您按照上述方式设置了结构,扩展应用程序所要做的就是删除新的视图模型在 viewmodels 文件夹中以及在 views 文件夹中的适当视图。然后,您只需将它们注册到 main.js 中的路由器。当导航到相应的路由时,路由器将定位您的模块,组合基础设施将看到它它已绑定并插入到 DOM 中”。

上面的指导似乎表明我应该使用视图而不是视图模型,因为我没有尝试导航到 guestSummary.html 页面,而且我似乎不需要将模型添加到路由器并且我'我并没有真正使用路由器导航到 guestSummary.html 页面。

由于 guestSummary 需要数据和数据绑定,我最好尝试将 guestSummary.html 作为 VIEW 加载并将数据绑定到 $parent(或 $parent.parent 等)属性,而不是尝试组合 guestSummary.js文件与 guestSummary.html 文件并加载这两个作为 VIEWMODEL?

有没有更好的方法来做我想要完成的事情?提前感谢您可能愿意分享的任何帮助。

0 投票
1 回答
88 浏览

javascript - 在调用服务器完成之前启动画面消失

嗨,我希望能够稍微延迟我的应用程序的启动,这就是我的意思。

这是我的外壳视图:

这是我的外壳视图模型:

我使用 observables 而不是我的视图路径的字符串表示的原因是因为在我的 shell 中,我决定是否应该在 login 或 homepage 上发送我的用户。

这很有效,除了从服务器获取 isAuthenticated 属性所需的时间之外,启动屏幕消失并且用户在空白页面上等待直到接收到数据。

现在我可以尝试在 main.js 文件中获取数据并将其缓存,但我认为 main.js 应该只负责应用程序配置。

有没有办法在 shell 实际被绑定并且启动画面消失之前调用服务器以获取数据?

0 投票
1 回答
74 浏览

durandal - DurandalJs 是否支持 location.href="#page1"

我想通过单击按钮重定向到上一页,我可以使用 location.href="#PrevPage" 执行此操作会影响任何 durandalJs 功能

0 投票
2 回答
788 浏览

knockout.js - 拦截路线导航并询问用户“您确定要离开此页面吗?”

我有一个 Durandal 应用程序,允许用户更新各种个人资料信息。对于某些数据位,用户必须单击“保存”以表明他们想要保存他们的更改。

如果用户试图通过未保存的更改导航离开当前视图,我们希望拦截导航并弹出一个模式说“您有未保存的更改 - 您想在离开此视图之前保存它们吗?”

但是,在查看Durandal Router 插件文档时,我无法确定如何在我的视图模型中拦截导航请求。我想我想听一下 router:route:activating 事件。但:

  1. 我不确定在哪里以及如何为此设置侦听器。
  2. 我不知道如何在我的事件处理程序中取消导航(因此我可以弹出我的模式)。
0 投票
1 回答
891 浏览

durandal-navigation - 如何在 Durandal 中动态显示路线的选项卡?

这是一个两部分的问题。我对杜兰达尔和淘汰赛很陌生。

使用 Durandal 2.0.1 的 HTML Starter Kit 示例。

我用我自己的 vm 为 customers/:id 添加了一条路线,并用 nav = false 查看

因为 nav 为 false,所以在调用 buildNavigationModel() 时不会使用它。所以 shell.html 没有显示它的选项卡条目。到现在为止还挺好。

  1. 当我导航到 c:\temp\index.html#customer/123 时,我可以看到该页面,但它没有包含在页面顶部的选项卡中。当我查看 shell.html 时,它使用数据绑定来获取要在这些选项卡中显示的路由。那么它不应该显示我刚刚移动到的这条新路线吗?如果我设置路由,nav 为 true,是否足以刷新 shell 显示?还是我第一次尝试理解 ko 失败了?

  2. 所以我有一条客户/:id的路线。如果我去 index#customer/123 我想看到上面第 1 部分的新标签。如果我导航到 index#customer/234,我也希望看到一个新选项卡。然后用户应该能够在两个选项卡之间移动。这可以工作,还是真的只记录 customer/:id 路线而我只会看到一个选项卡按钮?

0 投票
1 回答
424 浏览

javascript - Durandal 作曲的错误绑定处理

Durandal 在附加视图模型之前将其绑定到视图,当您尝试使用 jquery 检查元素大小时,它总是返回 0。这是因为 jQuery 无法获得不可见或不可见容器中元素的正确大小。

我的绑定处理程序,它用一些行数限制文本并用省略号替换剩余文本,当 durandal 绑定页面时不起作用,但在第二次更新后,当元素可见时工作

当我通过绑定处理程序使用jQuery.customSelect以及通过手动绑定回调使用它时,我也遇到了这个问题

0 投票
1 回答
229 浏览

knockout.js - Durandal 应用程序中的单独登录视图

我的 Durandal 应用程序的DOM结构如下:

这是我的路由器配置的片段

如您所见,我的登录视图被插入到<div data-bind="router:{}"></div>预期的行为中。但是,如果我在登录视图中,我需要隐藏标题视图,我通过订阅标题视图模型中的路由器配置来设法做到这一点:

但这感觉有点乱,标题视图的DOM仍在页面中,我真正想做的是,如果我在登录视图中,我只想让登录视图的DOM在那里,就好像我我在单独的页面中,只有登录视图。但到目前为止,我还没有找到一种干净的方法来做到这一点。