通过Meteor中的路由器填充模板

时间:2015-06-27 06:59:55

标签: javascript node.js meteor iron-router

我有一个Meteor应用程序。我创建了一个集合Messages

我正在使用

在服务器上发布消息
Meteor.publish("messages", function () {
  return Messages.find({'isDeleted': {$ne : true}}, {sort: {createdAt: -1}});
});

我使用iron-router

进行路由
this.route('messages', {
  path: '/messages',
  template: 'messages',
  waitOn: function() {
    return Meteor.subscribe('messages');
  },
  data: function() {
    return Messages.find({}, {sort: {createdAt: -1}});
  }
});

使用此功能,我使用data: ...但我仍然需要在messages.js中使用帮助器来实际获取数据:

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

现在我已准备好使用

模板中的消息
{{#each messages}}
  {{> message}}
{{/each}}

我这样做是正确还是我可以避免使用帮助器,让路由器用数据填充模板?在我看来,我所做的事情是多余的。

1 个答案:

答案 0 :(得分:2)

您是否应该使用路由器中的data是一个品味问题。我们假设你决定使用它......

  1. 您可以删除您的助手。你是对的 - 这是多余的。
  2. 模板的数据上下文为this,因此您可以将模板代码更改为:
  3. {{#each this}}
      {{> message}}
    {{/each}}
    

    或者,如果您不想在模板中使用this,只需修改data,如下所示:

    data: function() {
      return {messages: Messages.find({}, {sort: {createdAt: -1}})};
    }
    

    现在您可以保留原始模板代码:

    {{#each messages}}
      {{> message}}
    {{/each}}