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

时间:2015-12-19 12:19:34

标签: meteor meteor-blaze spacebars

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

我的Meteor.users集合包含一个状态字段,我想根据此状态返回不同的内容。

因此,例如,如果用户的状态为“当前”,则会看到“currentUser”模板。

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

{{> Template.dynamic template=userStatus}}

帮助程序返回一个字符串,以便根据需要与所需的模板对齐

 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'

     }
}

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

我见过的几个例子都使用了Sessions或click事件,但如果可能的话我宁愿使用游标。这是否意味着我所缺少的是重新计算以使其正确反应?或者其他一些我忽略的非常明显的东西。

1 个答案:

答案 0 :(得分:0)

结束使用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>

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