实现:“if"中的下拉菜单声明不起作用 [英] Materialize: dropdown in "if" statement doesn't work

查看:20
本文介绍了实现:“if"中的下拉菜单声明不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试实现一个仅在用户登录时可见的下拉列表.下拉列表在if"语句之外但不在内部时有效.显示了按钮Foo"和下拉按钮,但它没有下拉".

header.html

<模板名称=标题"><导航><div class="nav-wrapper"><a class="brand-logo" href="{{pathFor 'home'}}">标志</a><ul id="nav-mobile" class="right hide-on-med-and-down">{{#if currentUser}}<!-- dropdown1 触发器--><li><a class="dropdown-button" href="#!"数据激活=dropdown1"><i class="mdi-navigation-more-vert"></i></a><li><a href="#">Foo</a></li>{{别的}}<li><a href="{{pathFor 'signin'}}">登录</a></li>{{/如果}}<li><a href="{{pathFor 'about'}}">关于</a></li>

</nav><!-- dropdown1 结构--><ul id="dropdown1" class="dropdown-content"><li class="signout"><a href="#!">退出</a></li>

header.js

Template.header.rendered = function () {$(".dropdown-button").dropdown({belowOrigin: true//在按钮下方显示下拉菜单});};

可能是什么问题?

解决方案

当您的 Template.header.onRendered 生命周期事件第一次被触发时,下拉 HTML 元素尚未插入到 DOM 中,因为条件 {{#if currentUser}} 尚未满足(在实际登录 Meteor 应用程序之前需要花费少量时间,这就是 Meteor.user 反应性的原因很方便!).

这就是你的 jQuery 下拉初始化失败的原因:DOM 还没有准备好!解决方案很简单:重构你的空格键代码,将下拉标记放在它自己单独的模板中: