使用动态模板在 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>
(但请记住,模板助手不喜欢连字符,需要正确设置数据上下文)
我已经通读了有关动态模板的(有些稀疏的)文档,但仍然无法根据特定字段在用户仪表板上显示动态内容。
我的 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>
(但请记住,模板助手不喜欢连字符,需要正确设置数据上下文)