标签: coffeescript

Jasmine测试一个对象是否有某种方法

我正在使用Jasmine,我想测试一个对象是否有某种方法,如下所示:

it "should have 'open' method", ->
    @xhr = ajax.create()
    expect(@xhr).toHaveMethod "open" # I want to test like this!
Run Code Online (Sandbox Code Playgroud)

我怎么测试?谢谢你的好心.

javascript coffeescript jasmine

23
推荐指数
3
解决办法
2万
查看次数

coffeescript try/catch的简短表示法

我有时写代码如下:

try doSomething()
catch e
  handleError e
Run Code Online (Sandbox Code Playgroud)

这不是什么好看和干净的coffeescript代码应该是什么样子.

有没有办法写:

try doSomething()
catch e handleError e   #<-- will not compile
Run Code Online (Sandbox Code Playgroud)

这将在我的try/catch语句中节省大约33%的代码行;)

syntax shortcut try-catch coffeescript

23
推荐指数
1
解决办法
2万
查看次数

CoffeeScript中的嵌套数组解析

在Python中

def cross(A, B):
   "Cross product of elements in A and elements in B."
   return [a+b for a in A for b in B]
Run Code Online (Sandbox Code Playgroud)

如果用两个数组(或字符串)调用它,则返回一维数组.

但在CoffeeScript中

cross = (A, B) -> (a+b for a in A for b in B)
Run Code Online (Sandbox Code Playgroud)

返回一个二维数组.

  1. 你认为这是CoffeeScript的设计还是一个bug?
  2. 如何在CoffeScript中展平数组?

list-comprehension coffeescript

22
推荐指数
2
解决办法
6854
查看次数

使用Rails 3.1和Coffeescript"找不到变量"错误

我的应用程序中有一些视图,它引用了我的application.js文件,其中包含我在整个应用程序中使用的函数.

在使用3.1的边缘版本之后,我刚刚安装了Rails 3.1版本候选版本.直到我安装RC我没有任何问题,但现在我收到此错误:

ReferenceError:找不到变量:indicator_tag

indicator_tag是我在application.js中定义的函数.我在javascript文件中注意到的唯一区别是现在我的所有函数都包含在:

(function() { ... }).call(this);
Run Code Online (Sandbox Code Playgroud)

我理解这是针对变量范围的吗?但它可能阻止我的页面使用这些变量吗?在有人要求之前,我确保我的include标签中的javascript路径是正确的.

javascript ruby-on-rails coffeescript

22
推荐指数
2
解决办法
5771
查看次数

如何在CoffeeScript中编写这个lambda闭包?

我试图用CoffeeScript重新创建这个流行的jQuery lambda闭包:

(function($, window, undefined){
  $(document).ready(function(){
    ...
  });
})(jQuery, window);
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

(($, window, undefined) ->
  $ ->
    alert "js!"
)(jQuery, window)
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

错误:第1行的解析错误:意外的'BOOL'

看起来这undefined就是问题的原因.关于如何解决这个问题的任何想法?

javascript coffeescript

22
推荐指数
2
解决办法
1万
查看次数

Rails - 从JavaScript调用CoffeeScript

我正在使用带有CoffeeScript的Rails 3.1并遇到了麻烦.如何从位于.js.coffee文件中的.js.erb文件中调用函数?

假设.js.coffee中的函数如下:

myName = -> "Bob"
Run Code Online (Sandbox Code Playgroud)

我想我可以像任何常规的js函数一样调用它,例如:

var theName = myName();
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.有任何想法吗?

或者是否可以在我的.js.erb文件中使用coffeescript来使一切都一样?

javascript ruby-on-rails coffeescript

22
推荐指数
1
解决办法
6218
查看次数

Coffeescript:没有硬编码的实例方法的引用类方法

以下面的代码为例:

class MyClass

  @staticMethod: -> hello_world()

  instanceMethod: -> MyClass.staticMethod()
Run Code Online (Sandbox Code Playgroud)

有没有办法从内部引用MyClass instanceMethod而不明确命名它?就像是self.staticMethod()

coffeescript

22
推荐指数
1
解决办法
4031
查看次数

ReactJS:如何访问子组件的引用?

我正在编写CoffeeScript中的代码,因为我一直在用它编写React.
这是基本结构.

{ div, input } = React.DOM

Outer = React.createClass
  render: ->
    div { id: 'myApp' },
      Inner()

Inner = React.createClass
  render: ->
    input { id: 'myInput', ref: 'myInput' }
Run Code Online (Sandbox Code Playgroud)

toggle我的外类上有一个方法,可以通过按快捷方式触发.它切换了我的应用程序的可见性.
当我的应用程序从隐藏切换到显示时,我想专注于输入.

现在切换方法看起来或多或少像这样:

Outer = React.createClass
  render: ->
     ......

  hide: ->
    @setState { visible: no }

  show: ->
    @setState { visible: yes }

    $('#myInput').focus() # jQuery
    # I want to do something like
    # @refs.myInput.getDOMNode().focus()
    # But @refs here is empty, it doesn't contain the refs in Inner …
Run Code Online (Sandbox Code Playgroud)

coffeescript reactjs

22
推荐指数
1
解决办法
1万
查看次数

从快速中间件中排除路由

我有一个节点应用程序像其他微服务前面的防火墙/调度程序一样坐着,它使用如下的中间件链:

...
app.use app_lookup
app.use timestamp_validator
app.use request_body
app.use checksum_validator
app.use rateLimiter
app.use whitelist
app.use proxy
...
Run Code Online (Sandbox Code Playgroud)

但是对于特定的GET路由,我想跳过除rateLimiter和proxy之外的所有路由.他们是否可以使用Rails before_filter设置过滤器:除了/:仅?

javascript middleware node.js coffeescript express

22
推荐指数
3
解决办法
3万
查看次数

Lodash Debounce没有贬值

我正试图使用Lodash去抖动函数,虽然它正在调用函数,但它似乎根本没有去抖动它.我的问题似乎与我在其他地方在SO或Google 看到的错误一样(通常,他们没有调用_.debounce返回的函数).

我目前的超级简单实现如下(在Angular with CoffeeScript中):

  s.search = -> _.debounce( s._makeSearchRequest, 1000 )()

  s._makeSearchRequest = -> console.log("making search request")
Run Code Online (Sandbox Code Playgroud)

在JS中,我相信:

  s.search = function() { _.debounce( s._makeSearchRequest, 1000 )() }

  s._makeSearchRequest = function() { console.log("making search request") }
Run Code Online (Sandbox Code Playgroud)

s.search()通过在输入框中输入来运行,如果我很快输入乱码,控制台会在每次按键时打印出"发出搜索请求",这样每秒多次 - 表示它根本没有被去抖动.

我有什么想法我做错了吗?

javascript coffeescript underscore.js angularjs lodash

22
推荐指数
1
解决办法
3万
查看次数