0

这是我的模板 onCreated 和辅助函数。我提供了内联注释以增加清晰度。我可以看到 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);
    }
});

编辑:我应该补充一点,我试图避免两次编写查询,因为我也在模板事件中使用它。(见代码)。

4

1 回答 1

0

这感觉像是一个时间问题。您正在订阅该出版物,但在分配The之前onePost您没有等待该订阅也似乎是多余的。您不需要在块中重新运行该代码块。我建议:.ready()self.postautorunonCreated

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;
    }
  }
});
于 2016-11-21T01:36:34.890 回答