【问题标题】:iron-router wait on Collection.findOne() as data object before render在渲染之前,iron-router 等待 Collection.findOne() 作为数据对象
【发布时间】:2014-04-13 02:26:14
【问题描述】:

我正在寻找一种解决方案,即 Iron-router 在渲染之前等待我的集合上的成功查找方法。

我的路线是这样的:

this.route('business', {
        path : '/business/:type/:_id',
        waitOn : function () {
            return Meteor.subscribe('business', this.params._id);
        },
        data : function () {
            return Business.findOne({_id: this.params._id});
        }
    });

这很好用。 Iron-router 似乎正在等待 Collection 的订阅,以便为客户端取回正确的文档。但是我在模板中需要的数据对于 findOne 函数有延迟。

Template.businessItemItem.rendered = function () {
    console.log(Router.current().data()); // undefined
    window.setTimeout(function(){
      console.log(Router.current().data()); // [Object]
    }, 1000);
}

解决方案 对于每个有同样问题的人。只需像这样为您的路线添加“动作”方法:

action : function () {
   if (this.ready()) this.render();
}

使用这种方法对我来说一切正常。

【问题讨论】:

  • 你是我的英雄!这让我发疯了。您的解决方案是完美的,但我会进行更多调查:如果它是 Iron-router 中的错误,我们应该在 github 上打开一个问题。谢谢!
  • 是的,我认为它没有按应有的方式工作。参考:github.com/EventedMind/iron-router/blob/dev/… 它说 waitOn 方法在渲染之前等待数据并返回它 - 但这不是我目前所做的......
  • 一个快速更新补充说,我有一个案例,在 action() 方法之前(然后之后)调用 data() 函数(如果我从浏览器刷新导致路由重新加载)。在这种情况下,即使这个解决方案也不起作用:-(所以我切换到 if (!this.ready()) return; put 作为 data() 方法的第一行,正如这篇文章中所建议的那样:groups.google.com/forum/#!topic/meteor-talk/lK3v9ZxIbco

标签: meteor iron-router


【解决方案1】:

我不确定我是否遇到了您的问题,但如果我遇到了,您应该阅读Controlling subscriptions,尤其是Router.onBeforeAction('loading')。现在,你正在重新发明轮子。

【讨论】:

  • 感谢您的评论,但请查看我已针对我的问题编辑的解决方案。使用 this.ready 的操作方法可以正常工作:)
  • 当然可以,因为您基本上是在重新编码默认的“加载”挂钩,这更好,因为它适用于每条路线,使用您的解决方案,您必须复制/粘贴此“操作”代码在每条路线上。
  • 我也有同样的问题。我尝试使用 waitOn() 钩子,但它似乎什么也没做。我正在返回一个包含几个 subscribe() 调用的数组,这应该让路由等待,但它没有。不过,蒂莫的解决方案对我有用。也许铁路由器有一个错误。
  • @Jachin,你确定你的代码中有Router.onBeforeAction('loading') 行吗?
  • 这里有同样的问题。 @PeppeL-G 我在代码中有Router.onBeforeAction('loading'),但这是一个不同的问题。当然@Timo 解决方案正在重新编码“应该”已经存在的东西,但在某些情况下似乎不是。我会尝试隔离一个案例并在github上放一个repo。
猜你喜欢
  • 2014-01-16
  • 2019-12-31
  • 2015-03-06
  • 2014-06-27
  • 2016-04-30
  • 2019-05-30
  • 2017-09-01
  • 2021-04-27
  • 2018-09-05
相关资源
最近更新 更多