问题标签 [durandal-2.0]

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 回答
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 回答
894 浏览

javascript - 在激活方法中获取活动路由哈希

我有两条具有不同哈希值和相同视图模型的路线:

如何在详细信息视图模型的activate方法中检测到详细信息视图模型的方式?我尝试遍历router.routes数组并使用 isActive() == true 查找路由,但这在激活方法返回结果之前不可用。

另外,如果我在binding视图模型的方法中添加对活动路由的检测,我会激活两个路由,而不管应用了哪个路由:

控制台日志:

0 投票
1 回答
2639 浏览

knockout.js - 使用 childRouter 时的 Durandal 路由器/生命周期事件

在使用 Durandal 构建的单页应用程序中,我有一个设置视图,其中包含不同的部分。我使用 childRouter 来解决不同的部分。

在这个应用程序中,许多代码与 Durandal 使用的组合生命周期事件挂钩。例如,这个自定义绑定:

到目前为止,此自定义绑定运行良好,将焦点设置到显示视图时应用绑定的字段。

但是,对于子路由器,时间已关闭。似乎主路由器在'router:navigation:composition-complete'加载“设置”视图时触发了该事件。此时,子视图还没有显示出来,绑定了自动对焦的元素并没有获得焦点。在设置页面之间导航时更清楚地说明了这一点:离开页面时,旧子视图上具有自动对焦绑定的字段获得焦点,然后显示新的子视图而没有焦点元素。

有没有办法让子路由器也省略事件?或者可能让主路由器推迟事件直到子路由器完成?

我还读到这也适用于合成的其他阶段:例如,将不会在子视图的视图模型上调用停用回调。因此,在子路由器上触发事件的一般修复将是我正在寻找的理想解决方案。

提前致谢。

0 投票
1 回答
294 浏览

breeze - Breeze js樱桃选择保存问题

我有一个批量插入屏幕,允许用户逐行插入产品。每个产品都有自己的测量单位。

这是我的保存更改代码:

一旦我尝试保存;我收到这条消息:

'entities' 参数是可选的,或者它必须是一个数组,其中每个元素都必须是一个实体

将代码修改为:

适用于一个产品单元。但是,我需要一次性保存一个包含所有单元的特定产品。感谢任何帮助。

0 投票
1 回答
74 浏览

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

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

0 投票
1 回答
658 浏览

c# - 向微风节省服务器功能发送附加参数

我在 durandal 项目中工作。我使用微风来检索和保存我的数据。我想在保存时向服务器发送实体以外的其他参数,例如 - 谁是保存实体的用户。但是,brew 的函数 saveChanges 只接受一个参数实体数组进行保存。

我能做些什么?

0 投票
2 回答
788 浏览

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

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

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

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

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

durandal - 在 Durandal 监听事件

我正在查看 Durandal 文档,但找不到侦听Durandal events的具体实现,例如router events

有人可以指出我的文档,或者(如果没有这方面的文档)一个例子吗?

0 投票
1 回答
500 浏览

typescript - durandal 打字稿引导程序

我想使用 typescript 创建一些围绕 durandal 的包装器,以便为我的开发团队轻松创建新的 SPA 应用程序。

让我简要描述一下我想要构建包装器的方式;开发人员需要配置初始引导类和配置以设置新应用程序。这是我现在可以实现的。

appcore.d.ts

应用程序.ts

这一切都编译得很好,app.ts被编译为 AMD 模块,但是当我尝试为我的应用程序创建主实体点时,真正的问题开始了

main.ts

输入apphost 后。我没有看到我的 apphost 有任何智能。我想要实现的是以这种方式拥有main.ts

并编译为main.js,因此 requirejs 可以加载我的应用程序。

我的问题是:我做错了什么,为什么我在输入apphost 后看不到所有属性和 Init 方法。