Durandal 路由 IF 语句
Posted
技术标签:
【中文标题】Durandal 路由 IF 语句【英文标题】:Durandal routing IF statement 【发布时间】:2018-04-19 20:52:42 【问题描述】:我的 shell.js 文件中的按钮上有一个点击绑定。点击带您返回
function goBack()
return router.navigateBack();
我有一个特定的路线(reportForm),我不希望它复制这种确切的行为。我正在尝试在返回之前引入确认消息。
function goBack()
if (router.routes[7].moduleId === "viewmodels/reportForm")
return router.navigateBack();
else
return app.showMessage(strings.logoutWarning, strings.logout, [strings.no, strings.yes])
.then(function (answer)
if (answer === strings.yes)
return router.navigateBack();
)
看起来它不知道当前的路线。我需要找出我当前的位置,看看是否匹配。它当前检查是否存在它总是返回相同的语句。如果有 Durandal 经验的人可以帮助我实现上述目标,我将不胜感激。
这是我的 Durandal 路由器地图(我要显示此消息的报告表单):
function activate()
router.map([
route: '', title: 'Welcome', moduleId: 'viewmodels/login', nav: true ,
route: 'home', moduleId: 'viewmodels/home', nav: true ,
route: 'log', moduleId: 'viewmodels/log', nav: true ,
route: 'locationSelect', moduleId: 'viewmodels/locationSelect', nav: true ,
route: 'history', moduleId: 'viewmodels/history', nav: true ,
route: 'helpText', moduleId: 'viewmodels/helpText', nav: true ,
route: 'scheduled', moduleId: 'viewmodels/scheduled', nav: true ,
route: 'reportForm/:formId(/:templateId)', moduleId: 'viewmodels/reportForm', nav: true
]).buildNavigationModel();
return router.activate();
【问题讨论】:
【参考方案1】:您可以检查router.activeInstruction().params[0]
值,它会为您提供您将要导航到的路线。在您的canDeactivate
(或您正在处理的任何其他地方)生命周期回调中,您可以将您的逻辑向用户显示确认消息,然后进行相应的导航。以下是您可以尝试的方法 -
function goBack()
if (router.activeInstruction().params[0] !== null && typeof(router.activeInstruction().params[0]) !== "undefined" && router.activeInstruction().params[0].indexOf("reportForm") >= 0)
return router.navigateBack();
else
return app.showMessage(strings.logoutWarning, strings.logout, [strings.no, strings.yes])
.then(function (answer)
if (answer === strings.yes)
return router.navigateBack();
)
希望这会有所帮助。
【讨论】:
谢谢@gkb。最后我确实使用 'if (router.activeInstruction().fragment.match(/^reportForm.*$/)) ' 弄清楚了,所以我猜如果我及时看到上面的内容会对我有所帮助。 activeInstruction 是我不知道的东西 @TomRudge - 是的,即使我在使用它时在文档中也找不到它......调试路由器对象也为我解决了类似的问题......以上是关于Durandal 路由 IF 语句的主要内容,如果未能解决你的问题,请参考以下文章
Durandal - 激活 DOM 后运行 datePicker
如何使 jQuery AutoComplete 功能在 Durandal 中工作?
Karma + Jasmine + Durandal + KnockoutJS + RequireJS 单元测试中不匹配的匿名 define() 模块