有趣的是Ember,CoffeeScript优先

时间:2014-02-10 22:54:26

标签: ember.js coffeescript

如果

 !Ember.isEmpty @get('a') #-> true

 !Ember.isEmpty @get('b') #-> false

然后为什么

 !Ember.isEmpty @get('a') and !Ember.isEmpty @get('b') #-> true

或者是我的CoffeeScript?

2 个答案:

答案 0 :(得分:5)

您遇到的问题是Coffeescript优先级。您在javascript中的代码是:

!Ember.isEmpty(this.get('a') && !Ember.isEmpty(this.get('b')));

您需要添加parens以使操作顺序更明确:

!Ember.isEmpty(@get('a')) and !Ember.isEmpty(@get('b'))

所以在javascript中它是:

!Ember.isEmpty(this.get('a')) && !Ember.isEmpty(this.get('b'));

答案 1 :(得分:1)

.isEmpty之后的所有内容都被解释为该函数调用的参数。如果这不是你想要的,你需要括号或组。

此外,为了清晰起见,您应该使用not代替!

如果您只使用括号对呼叫及其参数进行分组,则会更清楚:

not Ember.isEmpty(@get 'a') and not Ember.isEmpty @get 'b'

甚至更清楚,虽然有点lispy

(not Ember.isEmpty @get 'a') and not Ember.isEmpty @get 'b'