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 一起工作

使用 ES6 模块和 CoffeeScript 的首选方式

借花献佛——可优先掌握的linux命令

没有 CoffeeScript 的 CoffeeScript 中的问号语法

CoffeeScript单元测试?