如何在Handlebars模板中直接根据数组长度控制按钮启用/禁用状态?
当然可以实现啦!完全不用在组件JS里加额外的实例变量,直接在Handlebars模板里就能搞定~
方法一:用内置比较助手(适合Ember等带扩展的Handlebars环境)
如果你的项目是和Ember.js搭配使用的,它的Handlebars内置了gt(greater than,大于)这类比较助手,刚好能满足你的需求。只需要把模板代码改成这样:
{{my-button count=selectedRows enabled=(gt selectedRows.length 0)}}
gt助手会接收两个参数,先对比selectedRows.length和0的大小,前者大于后者时返回true,否则返回false,完美匹配enabled需要的布尔值。
方法二:自定义比较助手(适合原生Handlebars环境)
如果是原生Handlebars环境,没有内置比较助手也没关系——我们只需要全局注册一个简单的自定义助手就行(这不属于组件的实例变量,完全符合你的要求)。在项目的Handlebars初始化代码里添加这段:
Handlebars.registerHelper('gt', function(a, b) { return a > b; });
注册完成后,模板里就能用上文同样的写法了。
方法三:利用真值判断(无需额外助手)
还有一种更“原生”的写法,不用依赖任何助手,借助Handlebars对真值的判断逻辑:当数组长度大于0时,selectedRows.length是非零数字,属于真值;长度为0时则是假值。你可以这样写:
{{my-button count=selectedRows enabled=(if selectedRows.length true false)}}
不过这种写法的语义不如比较助手清晰,毕竟我们明确要判断“长度大于0”,用gt助手会更直观。
不管用哪种方法,都不需要在组件JS里添加任何额外的实例变量,完全在模板层面就能实现根据selectedRows的长度控制按钮的启用状态~
内容的提问来源于stack exchange,提问作者copenndthagen
相关产品推荐
相关产品推荐

