我正试图从Discover Meteor的显微镜项目中了解这段代码:
https://github.com/DiscoverMeteor/Microscope/blob/master/client/templates/includes/header.js
通过向选项卡添加“活动”类来使页面上的当前路径选项卡处于活动状态,但是有些代码我不理解。具体做法是:
return Router.current() && Router.current().route.getName() === name
我不明白名字的来源,以及为什么有必要。是否存在使用iron的路由案例:Router.current()不会返回true(例如服务器端路由)?
我也很困惑为什么在辅助函数中返回一个布尔值的原因:
return active && 'active';
如果布尔值返回true,Spacebars是否只将'active'类应用于选项卡?如果是这种情况,有人可以指出有关如何使用Spacebars的更多信息吗?
非常感谢。
答案 0 :(得分:1)
我不明白姓名的来源
name
变量是传递给_.any
迭代器函数(http://underscorejs.org/#some)的谓词函数的参数,所以基本上它是对辅助函数的每个参数的迭代(存储在args
变量中)以查看它们中是否与谓词函数匹配。
如果助手的至少一个参数通过谓词测试,谓词函数的返回值为true,谓词测试将当前路由名称与当前迭代的值进行比较。
顾名思义,是否存在使用iron的路由案例:Router.current()赢得了路由器 返回true
Router.current()
是一个返回当前RouteController
的被动数据源,因此它可能会在某个时刻返回非真实值(特别是在该应用程序首先被初始化。)
return active && 'active';
关于这一行JS,它与Spacebars几乎没有关系,它只是一个常见的JS技巧,其中包含一系列AND运算符的布尔表达式在遇到伪值时停止执行并返回解析最后一个值。
这意味着如果active
为false,则它立即返回false,但如果它为true,则整个表达式返回'active'
字符串。
涉及Spacebars的唯一地方是,当用作HTML属性值的帮助器计算为虚假值时,该属性不会进入DOM。
我个人使用这种语法,我觉得不那么模糊,但这主要是基于意见的。
return active?"active":"";