使用动态模板在 Meteor 中显示动态内容

Displaying dynamic content in Meteor using Dynamic Templates

我已经通读了有关动态模板的(有些稀疏的)文档,但仍然无法根据特定字段在用户仪表板上显示动态内容。

我的 Meteor.users collection 包含一个状态字段,我想 return 基于此状态的不同内容。

因此,例如,如果用户的状态为“当前”,他们将看到 'currentUser' 模板。

我一直在使用动态模板助手(但也考虑过使用模板助手参数,这可能仍然是可行的方法)但它没有为具有不同状态的用户显示不同的模板。

{{> Template.dynamic template=userStatus}}

并且助手 return 是一个字符串,用于根据需要与所需的模板对齐

 userStatus: function () {
     if (Meteor.users.find({_id:Meteor.userId(), status: 'active'})){
         return 'isCurrent'
     }
     else if (Meteor.users.find({_id:Meteor.userId(), status: ‘isIdle'})) {
         return 'isIdle'

     } else {
         return ‘genericContent'

     }
}

可能有更好的方法来解决这个问题,但这似乎是一个很常见的用例。

我见过的几个例子使用会话或点击事件,但如果可能的话我宁愿使用光标。这是否意味着我缺少的是 re-computation 以使其正确响应?或者我忽略的其他非常明显的事情。

有一个获取当前用户对象的快捷方式,Meteor.user()。我建议您获取此对象,然后检查 status.

的值
userStatus: function () {
  if(Meteor.user()) {
    if (Meteor.user().status === 'active') {
      return 'currentUserTemplate';  // this should be the template name
    } else if (Meteor.user().status === 'isIdle') {
      return 'idleUserTemplate';  // this should be the template name
    } 
  } else {
    return ‘notLoggedInTemplate';   // this should be the template name
  }
}

最终使用了 this approach discussed on the Meteor forums,这看起来更干净一些。

  {{> Template.dynamic template=getTemplateName}}

然后助手变成:

  getTemplateName: function() {
        return "statusTemplate" + Meteor.user().status;
    },

这意味着您可以根据状态使用模板名称:

<template name="statusTemplateActive">
 Content for active users
</template>

(但请记住,模板助手不喜欢连字符,需要正确设置数据上下文)