如何根据当前模板数据渲染子模板?

时间:2015-10-24 20:11:36

标签: javascript meteor meteor-blaze

我正在制作一个用户可以提交问题的网络应用程序,任何人都可以回答。

我刚刚收到了回答(评论)功能,但当您回答一个问题时,答案会显示在所有问题模板上。我怎样才能让它出现在他们输入的问题上。

用于回答的JS代码:

Template.question.events({
  'click #submit-answer': function(e,t) {
    e.preventDefault();

    var answer = t.find("#answer-input").value;

    Answers.insert({
      answer: answer,
      createdAt: new Date(),
      owner: Meteor.user(),
      username: Meteor.user().username
    });
  }
});

Template.question.helpers({
  Answers: function() {
    return Answers.find({}, {sort: {createdAt: -1}});
  }
});

我的HTML:

{{#each Answers}}
  {{> answer}}<br />
{{/each}}

1 个答案:

答案 0 :(得分:0)

您可以使用类似的内容来关联问题和答案:

Template.question.events({
  'click #submit-answer': function(e,t) {
    e.preventDefault();

    var answer = t.find("#answer-input").value;

    Answers.insert({
      answer: answer,
      createdAt: new Date(),
      owner: Meteor.userId(),
      username: Meteor.user().username,
      questionId: this._id
    });
  }
});

Template.question.helpers({
  Answers: function() {
    return Answers.find({questionId: this._id}, {sort: {createdAt: -1}});
  }
});

请注意,我已将owner更改为userId中的take,而不是整个user对象。

答案有一个questionId字段,它在Answers助手的选择器中使用。

如果答案仅在与问题相关时才有意义,您可以将它们作为子文档直接嵌入question个对象中。

不这样做有一个缺点,它需要你创建一个反应性连接,目前没有一个有效和规范的实现。