【发布时间】: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