这是我的模板onCreated和helper函数。我提供了内联评论以增加一些清晰度。我可以看到self.post最终被设置,因为当我登录Template.instance()时它出现在我的控制台上。但是,当我记录Template.instance()。post时,它总是未定义的。
Template.default.onCreated(function() {
var self = this;
self.autorun(function() {
var postId = FlowRouter.getParam('post_id');
self.subscribe('onePost', postId);
self.post = Posts.findOne(FlowRouter.getParam('post_id'));
});
});
Template.default.helpers({
poststage: function(stage) {
console.log(Template.instance()); // I can see post object here
console.log(Template.instance().post; //always undefined
if(Template.instance().post) {
// never true
return Template.instance().post.stage == stage;
}
}
});
Template.default.events({
'submit form':function(event, instance) {
Meteor.call('someFunc', instance.post.anotherField);
}
});
编辑:我应该补充一点,我试图避免两次编写查询,因为我也在模板事件中使用它。 (见代码)。
答案 0 :(得分:0)
这感觉就像一个时间问题。您正在订阅onePost
出版物,但在分配.ready()
之前,您并没有等待该订阅self.post
autorun
也似乎是多余的。您不需要在onCreated
块中重新运行该代码块。我建议:
Template.default.onCreated(function() {
this.postId = FlowRouter.getParam('post_id');
self.subscription = subscribe('onePost', this.postId);
});
Template.default.helpers({
poststage: function(stage) {
if ( this.subscription.ready() ){
return Posts.findOne(this.postId).stage;
}
}
});