Ember.js 中的自嵌套无限路由

2024-01-06

我想用 Ember.js 制作一种目录结构。

以下是 url 的示例:folder/1/folder/44/document/3

正如您所看到的,一个文件夹中可以包含多个文件夹,但也可以包含文档。我想知道我应该如何在路由器中处理类似的事情,因为事先我的应用程序不知道文件夹内是否有其他文件夹或只有文档。

我想我需要制作单独的路线而不是嵌套的路线:

App.Router.map(function() {
  this.route('folder', {path: 'folder/:folder_id'}); // -> FolderRoute
  this.route('document', {path: 'document/:document_id'}); // -> DocumentRoute
});

当文件夹或文档具有父文件夹时,父文件夹的 ID 将从后端以数组形式给出。

让我们以我的示例网址为例。最深的嵌套模型是 id 为 3 的文档。该文档模型的folder_id为44,文件夹44的parent_folder_ids为[1]。不知何故,我的路由器需要知道它必须从中生成示例 url。

我已经看到可以使用 router.generate 生成 url,但我不确定这是否是我需要的,或者 queryParams 是否是最佳解决方案。

(https://github.com/tildeio/router.js#generate-urls https://github.com/tildeio/router.js#generating-urls)


(@MikeGrassotti 给了我这个灵感,因为他说他认为这是可以做到的(here https://stackoverflow.com/questions/17048372/ember-js-nested-folder-like-route-contain-slash),所以我开始挖掘。 :))

为此,您需要使用星形段而不是动态段。基本上,您指定一个*在你的路径上,路由器知道会期待“任何东西”,包括斜杠,这是常规动态段不允许的,根据文档(here https://github.com/tildeio/route-recognizer):

动态段匹配除 / 之外的任何字符。

因此我们可以如下定义路由器:

App.Router.map(function() {
  this.route('folder', {path: 'folder/*path'}, function(){
    this.route('document', {path: 'document/:document_id'});    
  });  
});

The document路线嵌套在folder路线并具有定期动态段。这folder另一方面,路线定义了一个时髦的*path,基本上可以是前面的任何内容folder/.

在 - 的里面FolderRoute,我们需要通过获取路径的最后一部分(不包括斜杠)来隔离文件夹 ID,然后查找子文件夹和/或文档,如下所示:

App.FolderRoute = Ember.Route.extend({
  model: function(params){
    var lastSlash = params.path.lastIndexOf('/');
    var folder_id = params.path.substr(lastSlash + 1);
    var folder = App.FILE_STRUCTURE.findBy('folder_id', folder_id);    

    Ember.set(folder, 'currentPath', params.path);

    return folder;
  }
});

我们还需要记住最近的路径,因为我们需要使用它来访问子文件夹。

我们过渡到路线将如下所示:

var newPath = this.get('currentPath') + "/folder/" + folder;
this.transitionToRoute('folder', newPath);

查看工作演示here http://emberjs.jsbin.com/zubusa/1/edit?html,js,output

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

Ember.js 中的自嵌套无限路由 的相关文章

随机推荐

  • Docker 仅向主机公开端口

    docker 是否能够仅向主机公开端口而不向外部公开端口 我需要让 docker 与 mongo 数据库一起运行 并且我希望它只能从主机访问 但我需要链接主机端口 27017 这可能吗 或者唯一可能的方法是更改 防火墙定义 当然可以 只需将
  • 在标签android中添加片段的最佳方法是什么

    我的应用程序有一个底部导航栏 其中有 5 个选项卡 所以根据这些选项卡 我有 5 个片段 当我单击选项卡时 片段会根据该选项卡发生变化 我可以使用方法 beginTransaction replace 来切换片段 我不希望每次切换选项卡时都
  • django 管理页面和 JWT

    我们使用 django rest framework 和 django rest framework jwt 进行身份验证 它可以在除 django 管理页面之外的任何地方使用ip port admin 那仍然需要用户名和密码 是否有设置或
  • Maven 测试无法使用 Spring Boot 2.2 和 JUnit 5 运行 Cucumber 场景

    我正在 Spring Boot 2 2 6 上尝试 JUnit 5 和 Cucumber 并且在我的应用程序中需要 BDD 场景和单元测试 我已经创建了一个虚拟 ping 控制器对应的功能文件 一切正常 我运行时不会调用黄瓜测试mvn cl
  • Ruby 奇怪的错误

    每当我需要 ruby 或 irb 中的文件时 我都会收到此错误 LoadError no such file to load insert any filename rb from
  • 隐藏特定表的第 n 个子级

    我在一页上有两个表格 我该如何解决第二个问题 id tapp 运行显示 隐藏第 n 个子函数 我无知地尝试通过将 id 引用添加到开头来解决特定的表 td nth child var x document getElementById ta
  • 通过 PHP 从内容配置中提取文件名

    我需要一个正则表达式从以下字符串中提取文件名 包括文件扩展名 attachment filename UTF 8 test rar 或者像这样 attachment filename UTF 8 Epost 20 test part01 r
  • Apollo / GraphQl - 类型必须是输入类型

    向大家致以我正在学习的过程 并将 Apollo 和 graphQL 集成到我的一个项目中 到目前为止一切顺利 但现在我正在尝试进行一些突变 并且在输入类型和查询类型方面遇到了困难 我觉得事情比应有的复杂得多 因此我正在寻求有关如何处理我的情
  • 用宏连接字符串[重复]

    这个问题在这里已经有答案了 可能的重复 C语言中连接两个字符串的宏 https stackoverflow com questions 2191316 macro for concatenating two strings in c 如何用
  • MSAccess 2010 VBA 打开只读数据库

    我有一个 MS Access 数据库 我试图将存档数据从位于只读文件夹中的另一个 MS Access 数据库中提取出来 所以 Dim aidbx As DAO Database Dim stDB as STring stDB path to
  • Java / JPA 程序员的 Oracle 将空字符串视为 NULL 问题

    如何处理 Oracle 在数据库中将空字符串存储为 null 的情况 我希望它存储为空字符串 因为它不是 NULL 因为发出查询会更容易 像这样的事情会选择空字符串和非空字符串 但不会选择空值 select from mytable whe
  • 如何读取gcs存储桶中的文件内容

    我想打印 GCS 存储桶中文件中存在的数据 根据我的要求 文件不应下载到本地系统 但代码应直接从 gcs 存储桶本身读取代码 由于我的文件大小很大 我不希望将文件下载到本地系统 下面是我正在尝试的代码 但我没有得到预期的输出 import
  • 来自 CMake 的 Nuget 包

    我正在使用 CMake 生成 C WPF 项目 我遵循了这个 CMakeLists txtexample https github com bemehiser cmake csharp wpf example blob master Exa
  • 使用 subprocess.run 在 Windows 上运行进程

    我希望通过 Python 运行以下非常冗长的 shell 命令 C Users Alex Desktop tableexporter WGTableExporter exe E Steam Games Installed Directly
  • python'float'对象不能被解释为整数

    import numpy as np def romberg f l val np zeros l for i in range 0 l h 2 1 i N 2 h val i trapez f h N return val def tra
  • 高图表中的不连续数据集

    这是我尝试加载的两种类型的数据集 根据下拉组合还有更多类型的数据集 这些是 14 天的数据集 也是 14 24 小时的每小时级别 这两种类型的数据集是 1 连续 7 8 2014 0 00 9442 7 9 2014 0 00 8492 7
  • 从 data.frame 中采样,同时控制比例 [分层采样]

    我有以下数据集 id1 lt c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 status lt c 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2
  • Playwright 框架:有没有一种方法可以在 playwright 中执行依赖测试?

    Playwright 框架 有没有一种方法可以在 playwright 中执行依赖测试 例如 我们使用 TestNg 注释的 取决于 方法 或在 Selenium Webdriver 中使用 Priority 注释 我有一个依赖于其他测试用
  • 如何在 Mac OSX 下使用 gcc 设置可执行文件的运行时路径(-rpath)?

    我想在 Mac OSX 下在编译时设置可执行文件 对于链接器 的运行时路径 以便动态链接器在程序启动时找到非标准位置的共享库 在 Linux 下 这可以通过 Xlinker rpath Xlinker path to 或使用 Wl rpat
  • Ember.js 中的自嵌套无限路由

    我想用 Ember js 制作一种目录结构 以下是 url 的示例 folder 1 folder 44 document 3 正如您所看到的 一个文件夹中可以包含多个文件夹 但也可以包含文档 我想知道我应该如何在路由器中处理类似的事情 因