【问题标题】:Iron Router routing to new collection document url dynamicallyIron Router 动态路由到新的集合文档 url
【发布时间】:2015-05-26 00:42:12
【问题描述】:

我有一个目标 mongo 集合。

我正在使用 Iron Router 通过 '/goals/:_id' 导航到每个目标文档

这非常适合点击应用。

但是,当用户向集合添加新目标时(通过服务器 Insert 方法),我想同时自动导航到该页面。

在客户端:

'click #new-goal': () ->
    Meteor.call("newGoal", (error, result) ->
        Router.go('/goal/#{result}')
        console.log "#{result} created and user redirected.")

newGoal 方法在服务器上运行,Router.go 在回调返回之前运行。

我应该使用“waitOn”还是有更好的实现方式?

谢谢!

【问题讨论】:

    标签: mongodb meteor iron-router


    【解决方案1】:

    检查您的 Coffeescript 缩进。 Router.go 不应该在回调之前发生。


    关于 Meteor 文档所说的争论,这里是来自文档的 sn-p:

    当方法完成时(可能会在 Meteor.call 返回之前发生也可能不会发生),回调将使用两个参数调用:错误和结果。如果抛出错误,则 error 将是异常对象。否则,错误将是未定义的,返回值(可能未定义)将在结果中。

    这是什么意思?

    1. Meteor.call 之后的代码将在方法返回之前运行(不包括回调内部的代码)。
    2. 在服务器端方法完成之前回调不会运行(这是合乎逻辑的,因为在方法完成之前无法提供响应或错误。这也符合观察到的行为。此外,它与实际的流星一致代码here

    【讨论】:

    • 当从客户端调用 Meteor.call 时,它总是异步运行,因此在方法发生之前运行 Router.go(并且更新本地缓存)是非常自然和可以理解的,仅 Meteor.call当你在没有回调的情况下从服务器运行它时阻塞。
    • 如果你看代码,Router.go 在回调里面。在 Meteor.call 返回之前,回调不会运行。还是有人在我移开视线时重写了回调的定义?
    • 哑巴。问题不在于Router.go - 它是使用单引号的路线。单引号不能解决 #{}。换双了,生活还不错。谢谢大家!
    • 我认为您误读了文件和我的回答。查看更新的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2018-11-21
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多