Ember 的乐趣,CoffeeScript 优先
Posted
技术标签:
【中文标题】Ember 的乐趣,CoffeeScript 优先【英文标题】:Fun with Ember, CoffeeScript precedence 【发布时间】:2014-03-08 12:23:18 【问题描述】:如果
!Ember.isEmpty @get('a') #-> true
与
!Ember.isEmpty @get('b') #-> false
那为什么
!Ember.isEmpty @get('a') and !Ember.isEmpty @get('b') #-> true
还是我的 CoffeeScript?
【问题讨论】:
【参考方案1】:您遇到的问题是 Coffeescript 优先级。您在 javascript 中的代码是:
!Ember.isEmpty(this.get('a') && !Ember.isEmpty(this.get('b')));
您需要在此处添加括号以使操作顺序更加明确:
!Ember.isEmpty(@get('a')) and !Ember.isEmpty(@get('b'))
所以在 javascript 中是:
!Ember.isEmpty(this.get('a')) && !Ember.isEmpty(this.get('b'));
【讨论】:
【参考方案2】:.isEmpty
之后的所有内容都被解释为该函数调用的参数。如果这不是你想要的,你需要括号或组。
此外,为了清楚起见,您应该使用not
而不是!
。
如果你只使用方括号对调用及其参数进行分组,它会变得更清晰:
not Ember.isEmpty(@get 'a') and not Ember.isEmpty @get 'b'
甚至更清晰,虽然有点口齿不清
(not Ember.isEmpty @get 'a') and not Ember.isEmpty @get 'b'
【讨论】:
以上是关于Ember 的乐趣,CoffeeScript 优先的主要内容,如果未能解决你的问题,请参考以下文章
coffeescript 1.7 破坏了我的 ember.js 计算属性
让 emberjs 入门套件与 coffeescript 一起工作