流星铁路由器嵌套路由

2024-03-14

我有两个具有一对多关系的流星集合:建筑物和空间

在我的建筑页面上,我想显示与建筑相关的空间。

现在,我是这样做的:

buildingsRoute.coffee
    BuildingController = RouteController.extend(template: "buildings")
    Router.map ->
      @route "building",
        path: "/buildings/:_id"
        waitOn: ->
          subs.subscribe "allBuildings"
          subs.subscribe "allSpaces"

        data: ->
          building: Buildings.findOne(@params._id)
          spaces: Spaces.find({building_id: @params._id})

建筑.玉石:

template(name="building")
        +with building
            .building
                .page-header.position-relative
                    h1.inline #{name}
                .row
                    .col-xs-12
                       +spacesList

template(name="spacesList")
    .widgets
        .row
            h1 Spaces
            +each spaces
                .col-xs-12.col-sm-6
                    .widget-box.widget-color-purple
                        .widget-header
                            a(href="{{pathFor 'space'}}") #{name}
                        .widget-body
                            p Content here

我猜这是行不通的,因为 spaceList 模板的数据上下文与 Iron Router 为构建定义的数据上下文不同。

我可以将“+each space”替换为“+each ../spaces”,但这对我来说似乎不是一个非常通用的解决方案(如果我想在另一个上下文中使用我的 spacelist 模板怎么办?)

所以我尝试在模板助手中定义数据上下文,如下所示:

Template.spacesList.helpers
  spaces: Spaces.find({building_id: @params._id})

但我收到错误消息:

Spaces is not defined.

所以我有点困惑。正确实现嵌套路由的流星方法是什么?

谢谢你!

EDIT:

Spaces集合的定义:/models/space.coffee

@Spaces = new Meteor.Collection("spaces",
  schema:
    building_id:
      type: String
      label: "building_id"
      max: 50

    name:
      type: String
      label: "Name"
      optional: true
      max: 50

    creation_date:
      type: Date
      label: "Creation date"
      defaultValue: new Date()
)

出版物:/server/publications.coffee

# Buildings

    Meteor.publish "allBuildings", ->
      Buildings.find()

    Meteor.publish "todayBuildings", ->
      Buildings.find creation_date:
        $gte: moment().startOf("day").toDate()
        $lt: moment().add("days", 1).toDate()



    # Publish a single item
    Meteor.publish "singleBuilding", (id) ->
      Buildings.find id


    # Spaces
    # Publish all items
    Meteor.publish "allSpaces", ->
      Spaces.find()

EDIT 2

经过一番研究,我终于想出了一个解决方案:

Template.spacesList.helpers
  spaces: () ->
    if Router._currentController.params._id
      subs.subscribe "buildingSpaces", Router._currentController.params._id
      Spaces.find()
    else
      subs.subscribe "allBuildings"
      Spaces.find()
  nbr_spaces: () ->
    Spaces.find().count()

附有附加出版物:

# Publish all items for building
Meteor.publish "buildingSpaces", (building_id) ->
  Spaces.find({building_id: building_id})

错误是:

  • 事实上,空间定义没有包装到函数中
  • 我用不太性感的 Router._currentController.params._id 替换了 @params._id,但我找不到任何快捷方式。

我仍然不知道这是否是管理嵌套路由的 Meteor(最佳)方法......

有更好的推荐吗?


在经历了很多不同的选择之后,我终于找到了一个我以前没有注意到的iron-router选项。这就产生了魔力。

通过使用收益,嵌套路由的实现(至少有两个级别(我没有尝试更多级别))变得更加容易:

我的路线是这样的:

Router.map ->
  @route "buildingSpaces",
    path: "/buildings/:_id/spaces"
    template: "building"
    yieldTemplates: {
      'buildingSpaces': {to: "subTemplate"}
    }
    waitOn: ->
      [subs.subscribe("allSpaces"),
       subs.subscribe "allBuildings"]

    data: ->
      building: Buildings.findOne(@params._id)
      spaces: Spaces.find({building_id: @params._id})

这些是我的模板:

template(name="building")
    .animated.fadeIn
        +with building
                .building
                    .page-header.position-relative
                        h1.inline #{name}
                    .row
                        .col-xs-12
                            .tabbable
                                ul.nav.nav-tabs
                                    li#menu-spaces(class="{{isActive 'buildingSpaces'}}")
                                        a(href="{{pathFor 'buildingSpaces'}}") #{nbr_spaces} Spaces
                                    li#menu-dashboards(class="{{isActive 'buildingDashboards'}}")
                                        a(href="{{pathFor 'buildingDashboards'}}") Dashboards
                                .tab-content
                                    +yield "subTemplate"


template(name="buildingSpaces")
    .animated.fadeInDown
        .page-header.position-relative
            a.btn.btn-info.btn-sm#newSpaceButton
                i.ace-icon.fa.fa-plus
                | New space
        .clearfix
        +spacesList

template(name="spacesList")
    .widgets
        .row
            +each spaces
                .col-xs-12.col-sm-6
                    .widget-box.widget-color-purple
                        .widget-header
                            a(href="{{pathFor 'space'}}") #{name}
                        .widget-body
                            p Content here
    +insertSpaceForm

最后,我有一个助手来管理我的菜单:

Handlebars.registerHelper "isActive", (template) ->
  currentRoute = Router.current().route.name
  if currentRoute and template is currentRoute then "active" 
  else ""

非常光滑。单击子菜单时,它仅加载子模板。这是我发现的最好的...

希望这可以帮助...

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

流星铁路由器嵌套路由 的相关文章

  • 嵌套字典理解python

    我无法理解 Python 3 中的嵌套字典推导式 我从下面的示例中得到的结果输出了正确的结构 没有错误 但只包含内部键 值对之一 我还没有找到像这样的嵌套字典理解的例子 谷歌搜索 嵌套字典理解 python 显示遗留示例 非嵌套理解或使用不
  • 从具有重复值的 MySQL 结果创建多维嵌套数组 (PHP)

    我目前正在使用 PDO fetchAll 函数从数据库中提取菜单数据 这样做会将查询结果的每一行放入以下结构的数组中 Array 0 gt Array MenuId gt mmnlinlm08l6r7e8ju53n1f58 MenuName
  • Meteor.http.call 不允许 Access-Control-Allow-Origin

    当我尝试使用 Meteor 调用外部服务器进行 JSON 查询时Meteor http call GET 方法我收到错误消息 Access Control Allow Origin不允许 如何允许我的 Meteor 应用程序向其他服务器发出
  • Meteor - 自动发起客户端登录

    我有一个 Meteor 应用程序 我使用 nginx 和内部 SSO 服务进行身份验证 我能够成功地完成此操作 并在服务器 Meteor onConnection 方法上的 nginx 设置 http 标头中检索用户详细信息 此时 我不确定
  • Python 中的嵌套函数如何工作?

    def maker n def action x return x n return action f maker 2 print f print f 3 print f 4 g maker 3 print g 3 print f 3 st
  • 如何在meteor.js中更新Mongodb集合?

    我有一个集合 当用户按下按钮时我需要更新它 我只需要将一个变量更改为另一个变量 在控制台中 这行代码有效 db users update username Jack age 13 username Jack 但是当我输入这段代码时 Temp
  • 使用forever运行meteor生成的节点包的正确语法是什么?

    在文档中 在您自己的服务器上运行meteor的过程是运行 meteor bundle bundle tgz 然后提取这个 tarball tar xzvf bundle tgz 然后启动一个节点服务器 MONGO URL mongodb l
  • 如何从嵌套 Jar 中提取 .class 文件?

    我有一个名为 的 Jar 文件外部Jar jar 其中包含另一个名为 的罐子内Jar jar 此 InnerJar 包含 2 个名为 的文件测试1 类 测试2 类 现在我想提取这两个文件 我尝试了一些代码 但它不起作用 class Nest
  • Meteor:多个不需要的 mongodb 连接使数据库部署饱和

    我维护了一些部署在 AWS elastic beanstalk 64 位 Amazon Linux 4 5 2 上的meteor 1 7 0 3 应用程序 所有连接到托管 mongodb 部署 在 Compose 上 mongodb 版本
  • 如何更新我的流星项目中的 cordova-plugin-device ?

    当我运行流星项目时 我收到此警告 警告 尝试安装插件 电子邮件受保护 cdn cgi l email protection 但 它的最低版本应为 1 1 1 以确保与 当前平台版本 安装最小 版本以方便起见 但您应该调整您的依赖项 然后 我
  • R 数据框到嵌套列表

    我想将这种格式的数据帧 tbl 转换为以下嵌套列表 tbllst library tidyr tbl lt tribble Col1 Col2 Col3 Var1 Var1 1 Var1 1 1 Var1 Var1 1 Var1 1 2 V
  • Meteor - 使用 Meteor.wrapAsync() 包装 NPM

    我正在尝试使用 Meteor wrapAsync 包装超级代理 NPM 一切正常 直到下面代码的最后一行 这导致我的流星应用程序崩溃 var superagent Meteor npmRequire superagent Example o
  • Meteor js:使Session对象部分持久化

    在我的流星应用程序中 我使用会话来存储有关用户活动的临时信息 我想使用 amplify js 将此信息的某些部分保留到浏览器 但不是全部 我想要一种拥有 临时 会话密钥和 持久 会话密钥的方法 例如我可以打电话 Session set pe
  • 如何获取模板的所有实例?

    我知道我可以通过这样做获得一个模板实例Blaze getView node 但我怎样才能找到所有实例Template foo 如果我们借行走DOM http www javascriptcookbook com article Traver
  • 嵌套 ng 网格?

    我们可以制作一个嵌套的 ng grid 像这样的事情 有可能吗 这是笨蛋 http plnkr co edit hYuFfxLR38LA0clIkF48 p preview http plnkr co edit hYuFfxLR38LA0c
  • 从 python 中的缩进文本文件创建树/深度嵌套字典

    基本上 我想迭代一个文件并将每行的内容放入一个深层嵌套的字典中 其结构由每行开头的空格数量定义 本质上 目标是采取这样的事情 a b c d e 并将其变成这样的东西 a b c d e Or this apple colours red
  • 从外部应用程序对流星用户进行身份验证

    我有一个流星应用程序 带有流星帐户 并且正在构建一个移动应用程序 如何通过移动应用程序对用户进行身份验证 我有一个 python web 服务 可以将数据发送到移动客户端 但我不知道如何从外部应用程序进行身份验证 我确实查看了DDP客户端
  • Meteor 中的触摸事件

    我开始使用 Meteor 做的第一件事是开始为手机 平板电脑编写基于触摸的 Web 应用程序 以下是重现问题的方法 第一步 创建一个空白项目 meteor create touch example cd touch example mete
  • 使用 Meteor 进行就地编辑:无法读取 null 的属性“parentNode”

    我已设置就地编辑network模型 有两个输入字段 分别是title和description模型的 当用户单击标题时 它会切换 h2 的标签 h2
  • Meteor 抛出 throwIfSelectorIsNotId 异常

    运行某些代码时 Meteor 会抛出 throwIfSelectorIsNotId 异常 我有两个客户端运行相同的代码 当第二个客户端运行相同的代码时会引发异常 无法弄清楚这个异常的含义以及抛出的原因 希望有人能够解释一下 对于客户端上的某

随机推荐

  • 将字符串提取函数包装在 ifelse 语句中

    下面的问题是一个延伸这个问题 https stackoverflow com questions 74135095 adding a column to the data that looks for a list of words and
  • 在现实世界应用中使用语义网络技术的示例[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您正在开发使用 RDF OWL SPARQL 技术的 可能是商业的 产品吗 如果是这样 您能描述一下您的产品吗 O Reilly 的
  • 写入/编辑 CSV 文件(不要重写整个文件!)

    我需要替换直接在 CSV 文件上操作的客户端的某些功能 该文件用作系统的配置文件 搜索到的大多数案例都是关于从 CSV 读取到其他格式的 其他将整个 CSV 放入内存 附加专用行和更改 然后将它们写回新文件 或覆盖现有文件 我想更聪明地完成
  • Jetpack Compose 应用程序范围内的条件 TopAppBar 最佳实践

    我有一个 Android Jetpack Compose 应用程序 它使用BottomNavigation and TopAppBar可组合项 从通过打开的选项卡BottomNavigation用户可以更深入地导航到导航图 问题 The T
  • 如何在python中实现小批量梯度下降?

    我刚刚开始学习深度学习 当谈到梯度下降时 我发现自己陷入了困境 我知道如何实现批量梯度下降 我知道它是如何工作的以及小批量和随机梯度下降在理论上是如何工作的 但实在无法理解如何用代码实现 import numpy as np X np ar
  • 无法再加载 rgdal

    我在 Ubuntu 上将 GDAL 更新为 2 2 2 现在rgdal在 R 中失败 当我尝试加载时收到此消息rgdal 我也尝试更新rgdal 但没有成功 Error in get method envir home lazy load
  • 在 Android 应用程序中从 Web 获取 UTC 日期

    我想要一个UTC date对于我的 Android 应用程序来说 它是独立于设备 和用户 的 我听说过一些事情 比如从 NTP 服务器获取日期 但无法从 google 或 SO 找到任何帮助 那么任何人都可以帮我提供一些代码片段或链接吗 提
  • 正确处理文件流和二进制流以及处理文件流

    事实上 我尝试对我的代码进行防错 但最终使它看起来相当混乱 我设置了一个函数来读取某种类型的文件 我希望函数在出现问题时返回 false 如果一切正常则返回 true 我无法弄清楚如何构建一切 我有一个尝试打开文件流的初始 try catc
  • 在 ServiceProvider 中使用 Entity Framework Core 3.1 和 UseInMemoryDatabase 选项(作用域生命周期)

    我已将一个 Web 应用程序项目从 NET Core 2 1 迁移到 3 1 也将 EF Core 从 2 1 1 迁移到 3 1 0 迁移后 一些单元测试不再工作 抛出重复键数据库异常 我模拟了这个问题并意识到 EF core 带有选项U
  • 带有远程文件的 HTML5 文件 API

    我尝试了几个小时使用 HTML5 文件系统添加带有 URL 的远程文件 例如http example com doc pdf http example com doc pdf 而不是通过文件输入获得的文件 因为我希望该过程是自动的 我有多个
  • 在 eclipselink 中设置隔离级别

    我想使用 eclipse 链接设置隔离级别 我尝试了这两种方法来做到这一点 java sql Connection mgr EMF get createEntityManager tx mgr getTransaction tx begin
  • Android Studio 与 Transfuse

    我可以在我的 android 项目中成功设置 Transfuse 但是当使用 Android Studio 运行该应用程序时 它失败了 可能是因为 Manifest xml 必须为空才能让 Transfuse 处理 有人曾经把这些一起工作过
  • 通过ViewBag传递模型对象

    我想知道是否可以通过 ViewBag 传递模型对象 我尝试了以下代码 但不知何故在我的视图中 它仅显示模型的路径 控制器 public ActionResult Tempo DateTime date1 new DateTime 1990
  • 安装签名的 msi 安装程序时出现奇怪的“程序名称”[重复]

    这个问题在这里已经有答案了 登录 MSI 安装程序后 我遇到以下问题 我正在使用signtool exe并且msi文件签名正常 但是当我测试它时 显示我公司名称的UAC确认对话框显示55847 msi的 程序名称 而不是我的安装文件的名称
  • Haskell - 如何基于二叉树的foldr创建mapTree函数?

    这是 Haskell 编程的第一原理 第 11 章代数数据类型中的一个问题 data BinaryTree a Leaf Node BinaryTree a a BinaryTree a deriving Eq Ord Show 我们实际上
  • 是否可以将 Flume 标头写入 HDFS 接收器并删除主体?

    text with headers 序列化器 HDFS 接收器序列化器 允许保存 Flume 事件标头而不是丢弃它们 输出格式由标头 后跟空格和正文有效负载组成 我们想删除正文并仅保留标题 对于 HBase 接收器 RegexHbaseEv
  • 使用 XDebug 设置 IntelliJ Idea 远程调试

    我连续几天尝试在 IntelliJ Idea 和 Xdebug 中设置远程调试 但没有成功 我有一个 Windows 7 主机和 VM VirtualBox 使用 Windows XP 作为 Web 服务器 它安装了 WampServer
  • 处理信号后如何停止从键盘读取?

    我正在编写一个程序 其中 SIGINT 信号在第一次发送时进行处理 但之后设置为默认值 例如 我有这个 static volatile int stop terminating 1 void handler int dummy stop t
  • 删除 MySQL 中列的最后两个字符

    我有一个 SQL 列 其中的条目是字符串 我需要在修剪最后两个字符后显示这些条目 例如如果条目是199902345它应该输出1999023 我尝试查看 TRIM 但看起来只有当我们知道最后两个字符是什么时 它才会提供修剪 但就我而言 我不知
  • 流星铁路由器嵌套路由

    我有两个具有一对多关系的流星集合 建筑物和空间 在我的建筑页面上 我想显示与建筑相关的空间 现在 我是这样做的 buildingsRoute coffee BuildingController RouteController extend