麻烦Coffeescript缩进

时间:2013-09-20 17:06:13

标签: javascript coffeescript

我正在尝试将其翻译成Coffeescript:

App.IndexView = Ember.View.extend(InfiniteScroll.ViewMixin, {
  didInsertElement: function(){
    this.setupInfiniteScrollListener();
  },
  willDestroyElement: function(){
    this.teardownInfiniteScrollListener();
  }
});

我的第一个方法是:

Whistlr.OrganizationsView = Em.View.extend
  InfiniteScroll.ViewMixin
  didInsertElement: ->
    @setupInfiniteScrollListener()
  willDestroyElement: ->
    @teardownInfiniteScrollListener()

但它抛出了意外的缩进错误。所以我尝试了这个:

Whistlr.OrganizationsView = Em.View.extend InfiniteScroll.ViewMixin
  didInsertElement: ->
    @setupInfiniteScrollListener()
  willDestroyElement: ->
    @teardownInfiniteScrollListener()

这给了我这个错误:

TypeError: InfiniteScroll.ViewMixin is not a function

如果我使用普通的js,它可以正常工作。所以问题肯定在于Coffeescript格式化。我无法弄清楚发生了什么,甚至无法正确搜索解释。任何指针都将不胜感激!

2 个答案:

答案 0 :(得分:3)

尝试

Whistlr.OrganizationsView = Em.View.extend InfiniteScroll.ViewMixin,
  didInsertElement: -> @setupInfiniteScrollListener()
  willDestroyElement: -> @teardownInfiniteScrollListener()

.extend的第二个参数需要是一个JavaScript对象。

答案 1 :(得分:0)

这是JS到Coffeescript的快速翻译。当我将其粘贴到“Try Coffeescript”浏览器窗口时,它会生成相同的JS(添加了返回值)。 extra(){}是为了我的利益,而不是CS的。他们告诉我这是对extend的调用,有2个参数,一个是对象属性,另一个是带有两个函数定义的对象。

App.IndexView = Ember.View.extend(
    InfiniteScroll.ViewMixin,
    {
    didInsertElement: ()  ->
        @setupInfiniteScrollListener()
    willDestroyElement: () ->
        @teardownInfiniteScrollListener()
    }
)