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

Populating template through router in Meteor

我有一个 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}}

我做的是否正确,或者我是否可以避免使用助手并让路由器用数据填充模板?在我看来,我所做的是相当多余的。

是否应该从路由器使用 data 是个人喜好问题。假设您决定使用它...

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

或者,如果您想避免在模板中使用 this,只需按如下方式修改 data

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

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

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