更新 Meteor 用户登录/注销时的条件属性
Update conditional attributes on Meteor user login/logout
我正在使用带有Iron-router的Meteor(如果相关的话)。我已经做了一些更改以适应 0.8 更新,但我仍在为一些事情而苦苦挣扎。
我没有在 html 中的div 中使用条件属性,而是使用 .render 来设置这些属性。但是现在,当用户登录时,我必须刷新页面或导航离开并返回(我认为不需要刷新),以便元素行为正确。
有谁知道我如何根据用户登录还是注销,在用户登录或注销时立即使这些属性正确运行?
Template.pt_entry.rendered = function() {
$('#signin').popover(),
$('#reviewModal').on('shown.bs.modal', function () {
$('#review-text').focus();
});
if(Meteor.userId()){
$('#signin').attr( 'data-toggle', 'modal' ),
$('#signin').attr( 'data-target', '#reviewModal' )
} else {
$('#signin').attr( 'data-toggle', 'popover' ),
$('#signin').attr( 'data-container', 'body' ),
$('#signin').attr( 'data-content', 'you must sign in to review' ),
$('#signin').attr( 'data-trigger', 'click' )
//add some logic for displaying error template.
}
}
实际上你有不同的选择:
如果您使用的是铁路由器,您通常可以在同一路由中显示不同的模板。您可以检查用户是否已登录,并根据此检查在模板之间切换。你可以用 beforeHook 检查它:
beforeHooks = {
isLoggedIn: function() {
if(!(Meteor.loggingIn() || Meteor.user())) {
Router.go('landingPage');
this.stop();
}
}
}
Router.onBeforeAction(beforeHooks.isLoggedIn);
另一种选择是使用默认的 {{currentUser}} 帮助程序
{{#if currentUser}}
<p>User is logged in</p>
{{else}}
<p>User is not logged in</p>
{{/if}}
也许你的代码不起作用的原因可能是新的 blaze 引擎。渲染回调只是在 Blaze 触发一次。通常 Meteor.userId() 是一个反应式数据源,因此您的模板会被重新渲染,但如果渲染的回调只是在未应用更改后触发。也许这些头脑对你有帮助!
相关文章:
- 有条件地在选项标记中应用布尔属性
- javascript对象操作:根据指定条件选择属性
- Javascript:循环属性内部的条件递增或递减
- 聚合物绑定条件属性和求值属性
- CSS根据属性的可用性有条件地应用样式
- JavaScript / jquery:如果选择了单选按钮并且数据属性符合条件,则添加类
- Reactjs基于jsx中的属性创建条件组件
- Javascript:当属性可能不存在时,在对象中使用OR条件
- 如何用angular js对HTML元素的id属性进行条件设置
- 未捕获的类型错误:无法读取属性'条件'的未定义
- Angular-使用条件$odd/$even以及ngClass的ng重复属性
- Javascript-在检查对象属性是否存在时避免异步竞争条件
- 如何在jQuery中定义条件属性选择器
- 从 ASP.NET Web 窗体中的服务器端属性创建 JavaScript 条件
- 在 React.js 中有条件地设置 html 属性
- 指定 CSS 属性的条件语句
- XSL:带有条件和车把的属性
- AngularJS - 有条件地使用属性指令
- 创建 if 条件基于 CSS 属性 -- JavaScript
- 更新 Meteor 用户登录/注销时的条件属性