2

我正在尝试将其翻译成 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 格式上。我无法弄清楚发生了什么,甚至无法正确搜索解释。任何指针将不胜感激!

4

2 回答 2

3

尝试

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

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

于 2013-09-20T17:12:12.733 回答
0

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

App.IndexView = Ember.View.extend(
    InfiniteScroll.ViewMixin,
    {
    didInsertElement: ()  ->
        @setupInfiniteScrollListener()
    willDestroyElement: () ->
        @teardownInfiniteScrollListener()
    }
)
于 2013-09-21T19:21:28.830 回答