如果用户未登录,我想为他呈现SignIn
模板,同时保留页面的URL。当他登录时,我想继续渲染他原来试图访问的URL。
以下一点CoffeeScript显示了我想要完成的目标。一个接近这个版本的版本直到最近一直工作,直到我更新到Meteor 0.8:
# If the user is not signed in, render the signin template instead of the
# actual page. However, keep the URL the same.
mustBeSignedIn = (pause) ->
if not Meteor.user()?
# How to render a different template from the intended one here?
### vvv ----
@render('masterLayout'
yieldTemplates:
signIn:
to: 'content'
)
pause()
Router.onBeforeAction(mustBeSignedIn, {
except: [ 'signIn' ]
})
我的layoutTemplate
包含名为yield
的{{1}}区域:
"content"
我直接转到<template name="masterLayout">
<div id="container-content">
{{> yield region="content"}}
</div>
</template>
和signingIn
模板并正确呈现其他路径。
答案 0 :(得分:1)
我认为你只需要返回渲染函数的结果。
mustBeSignedIn = (pause) ->
if not Meteor.user()?
return @render('masterLayout'
yieldTemplates:
signIn:
to: 'content'
)
这也是优先考虑Meteor.userId()
超过Meteor.user()
的好习惯,因为userId()只有在userId发生变化时才会被激活,因为user()将导致onBeforeAction在任何时候发生变化时运行当前用户记录。
答案 1 :(得分:0)
yield
中描述了this.render()
到模板的正确语法:
您可以通过调用渲染功能手动渲染。有 调用render方法的三种方法:
{{> yield region='name'}}
:渲染Route或RouteController的所有模板。这会将主模板渲染到主要的yield区域,并将所有yieldTemplates渲染到关联的this.render('templateName')
区域。{{> yield}}
:将名为“templateName”的模板渲染为主要产量this.render('templateName', {to: 'region'})
。{{> yield region='region'}}
:将名为“templateName”的模板渲染到名为“region”{{1}}的区域。
第三点回答了有关如何将模板渲染到命名区域的问题。