DurandalJS 路由行为

2024-04-14

我拥有的

试图了解发生了什么以及如何控制它。我对尚未经过身份验证的用户有一个“公共”视图,对经过身份验证的用户有一个“主页”视图。这是我的路线配置:

app.start().then(function() {
        //Replace 'viewmodels' in the moduleId with 'views' to locate the view.
        //Look for partial views in a 'views' folder in the root.
        viewLocator.useConvention();

        //configure routing
        router.useConvention();

        router.mapRoute('home', 'viewmodels/home', 'Test App', true);
        router.mapRoute('public', 'viewmodels/public', 'Test App', true);
        router.mapRoute('set/:id', 'viewmodels/set', 'Set');
        router.mapRoute('folder/:id', 'viewmodels/folder', 'Folder');
        router.mapRoute('api', 'viewmodels/api', 'API Reference');
        router.mapRoute('error', 'viewmodels/error', 'Error', false);
        app.adaptToDevice();

        //Show the app by setting the root view model for our application with a transition.

        if (dataservice.isAuthenticated() === true) {
            app.setRoot('viewmodels/shell', 'entrance');
            router.navigateTo('home');
        } else {
            app.setRoot('viewmodels/public');
            router.navigateTo('#/public');
        }

        router.handleInvalidRoute = function (route, params) {
            logger.logError('No route found', route, 'main', true);
            router.navigateTo('#/error');
        };
    });

问题

当我第一次运行该应用程序时,我未经过身份验证,并且收到错误:

Uncaught TypeError: Cannot call method 'lookupRoute' of undefined 

源自于'router.navigateTo('#/public');' line.

然后,当我尝试单击登录按钮时,我收到相同的错误:

define(['durandal/app', 'durandal/plugins/router', 'services/dataservice'], function (app, router, dataservice) {
   var publicViewModel = function () {
        self.logIn = function () {
            app.setRoot('viewmodels/shell');
            router.navigateTo('#/home');
        };

但内容加载正确。当我通过单击(例如 /folder/2)导航到特定页面,然后将 url 更改为 /folders/2 (无效)时,如预期的那样,我在日志中收到“找不到路由”,但我遇到了其他一些问题:

  1. 我没有收到错误页面或任何错误(我认为我应该根据我的handleInvalidRoute)
  2. 如果我点击其他内容,网址不会更改,并且不会加载新内容,同样没有错误。

我认为我以某种方式破坏了路由,但我不确定如何破坏。我该如何纠正上述问题?

Screen:


我怀疑出于某种原因,在您所在的位置调用 navigator 可能为时过早。要测试这个理论,请尝试移动此代码。

    if (dataservice.isAuthenticated() === true) {
        app.setRoot('viewmodels/shell', 'entrance');
        router.navigateTo('home');
    } else {
        app.setRoot('viewmodels/public');
        router.navigateTo('#/public');
    }

进入 publicviewmodel 上的“activate”方法,并在 main.js 中保留以下内容:

app.setRoot('viewmodels/public');

编辑:旧建议

我相信在你的根视图模型上你需要一个路由器属性。因此,修改您的公共视图模型以添加一个:

define(['durandal/app', 'durandal/plugins/router', 'services/dataservice'], function (app, router, dataservice) {
   var publicViewModel = function () {
        self.router = router;
        self.logIn = function () {
            app.setRoot('viewmodels/shell');
            router.navigateTo('#/home');
        };

(你在哪里定义自我?)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DurandalJS 路由行为 的相关文章

随机推荐

  • 是否有一种与系统无关的方法来确定表示当前目录级别和父目录级别的字符串?

    C 代码可以运行的不同环境对于文件和目录路径必须是什么样子有不同的约定 规则 一个常见的示例是分隔目录级别的字符 在 Windows 上 它是 在Linux上 它是 还有其他 也是未来的 系统可能遵循不同的规则 因此 为了创建健壮的代码 建
  • PostgreSQL:将结果与标题复制/粘贴到 Excel 中,无需代码

    我使用 MS SQL Server 2008 R2 MS SQL 我可以右键单击查询结果 将其与标题一起复制 粘贴到 Excel 中 以便于探索 现在使用 PG Admin PostgreSQL 我必须执行导出 文件 gt 导出 gt CS
  • 如何使用 .NET XML API 删除 xmlns 属性

    XmlElement Attributes Remove 方法对于任意属性都可以正常工作 导致已删除的属性从 XmlDocument OuterXml 属性中删除 然而 Xmlns 属性是不同的 这是一个例子 XmlDocument doc
  • “FOR UPDATE”v/s“LOCK IN SHARE MODE”:允许并发线程读取锁定行的更新“状态”值

    我有以下场景 用户 X 从位置 lc1 登录到应用程序 调用它Ulc1 用户 X 已被黑客攻击 或者他的某个朋友知道他的登录凭据 或者他只是从他计算机上的不同浏览器登录 等等 你明白了 从位置 lc2 同时登录 调用它Ulc2 我正在使用一
  • GraphQL 代码中的 Javascript 循环依赖

    我是 Javascript 新手 不知道如何解决这个问题 我正在创建一个 GraphQL 服务来提供对数据库的查询 我想定义三种类型 个人 公司和关系 type Relation person Person company Company
  • Java 如何向字符串添加重音符号“e”?

    在tucuxi现有职位的帮助下Java 不使用正则表达式从 String 中删除 HTML https stackoverflow com questions 2488967 java remove html from string wit
  • Java Lambda 表达式 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Java 8 中添加了 Lambda 表达式 我想了解为什么这很重要 对于尚未接触过函数式编程习惯的 Java 程序员来说 这意味着什么 这是否意味着
  • Postgresql - 加密 jsonb 数据

    我的 postgres 表中有一个 jsonb 列 用于存储 json 数据 我想以加密格式存储数据并能够查询并获取纯文本值 有办法做到吗 Use the pgcrypto https www postgresql org docs cur
  • 处理序列中的每一对

    我正在寻找一种简洁的方法来处理 NET 中序列中的每对 无序 元素 我知道我可以用嵌套来做到这一点for循环 但我一直在寻找更具可读性的东西 我正在想象类似修改过的东西Any 扩展方法 IEnumerable
  • C# 在下一行之前等待或暂停 X 秒

    我想找出执行以下操作的最佳方法是什么 我有一个与 httpwebrequest 一起使用的控制台应用程序 在我的应用程序的某些部分我想这样做 agent GetURL http site com etc Wait for 8 16 Seco
  • 在 IOS 中单击时更改按钮文本颜色

    我知道这个问题经常被问到 并且许多答案都是正确的 我的代码中遇到了问题 我有单选按钮 当用户单击按钮时 背景颜色和文本颜色会发生变化 背景颜色按我的预期更改 但单击按钮时文本颜色变为蓝色区域 我已将其编码为在单击时更改白色 但是当我单击按钮
  • 将 Map key 反序列化为 POJO 引用

    Jackson 是否可以从给定 id 的相同 json 字符串中获取对先前反序列化对象的引用 例如 我有以下 Java 类 public class Company List
  • 将 iPhone 应用程序上传到 AppStore 的步骤

    我想知道将我的 iPhone 应用程序上传到 AppStore 的基本步骤 如何使用证书创建配置文件以及上传应用程序还需要执行哪些其他设置 我刚刚使用 Xcode 和 iPhone SDK V2 2 1 在 iMac 上制作了一个应用程序
  • 所有方法都返回“.autoNumeric 不是函数 - 无法取消数字格式”

    我试图获取使用 autoNumeric 格式化的输入数字的原始值 但不能 因为我尝试执行此操作的每种方法都会返回 autoNumeric 不是函数 在控制台中 document ready function new AutoNumeric
  • 使用Android GPS检测并与其他手机连接

    所以我昨天问了类似的问题 并且确实收到了我的问题的答案 但是我真的认为我问得不正确 因此没有收到我需要的确切信息 我正在寻找 API 一些开源代码 甚至只是其他人在 Android 上实现这一目标的方法 我正在制作一个应用程序 需要查找指定
  • 为什么Python中没有len(file)?

    我对 Python 并不陌生 但我仍然很难理解是什么让某些东西变得 Pythonic 反之亦然 如果这是一个愚蠢的问题 请原谅我 但是为什么我不能通过执行 len file 来获取文件的大小 file len 甚至没有实现 所以它不像其他东
  • 过度使用 If else 语句

    我有一个查询 那就是我使用了一种方法 但是我很多次使用了 If Else 不是它变得非常含糊 请建议我也可以使用其他条件循环吗 下面是我的代码 if cardType AARP CARD TYPE userResponse messageB
  • HBase:创建多个表或包含多个列的单个表?

    什么时候创建多个表而不是创建具有大量列的单个表才有意义 据我了解 表通常只有几个列族 1 2 每个列族可以支持 1000 多个列 当 HBase 似乎在单个表中可能存在大量列时表现良好时 什么时候创建单独的表才有意义 在回答问题本身之前 让
  • SQL查询求和

    我有两张桌子 Unit Unit id Unit name Unit cost 成分 Component id Component name Unit id 它们通过以下方式连接在一起Unit id Unit id 1有名字Unit 1 N
  • DurandalJS 路由行为

    我拥有的 试图了解发生了什么以及如何控制它 我对尚未经过身份验证的用户有一个 公共 视图 对经过身份验证的用户有一个 主页 视图 这是我的路线配置 app start then function Replace viewmodels in