Как вы делаете анонимные занятия в Coffeescript? - PullRequest
6 голосов
/ 12 мая 2011

У меня есть рабочая идиома coffeescript / backbone, которая выглядит следующим образом:

SidebarWidgets = ((() ->
    SidebarWidgets = { }

    class SidebarWidgetPrototype extends Backbone.View
        initialize: (options) ->
            @template = $(options.templateId).html()
        render: () ->
            $(@el).html(_.template(@template, @model.toJSON()))
            @el

    class SidebarWidgets.user extends SidebarWidgetPrototype
    class SidebarWidgets.shoppingcart extends SidebarWidgetPrototype
    class SidebarWidgets.messages extends SidebarWidgetPrototype
    SidebarWidgets
)())

class Sidebar extends Backbone.View
    views: ['user', 'shoppingcart', 'messages']
    initialize: (options) ->
        @subviews = { }
        _.each(@views,(v) =>
            subviews[v] = news SidebarWidgets[v](
                model: cxDatasets[v]
                id: 'sidebar-' + v
                templateId: '#sidebar-' + v + 'template'
            )
        )
    render: () ->
        $(@el).html()
        _.each(@views, (v) =>
            $(@el).append(@subview(v).render())
        )

Цель этой идиомы - предоставить список базовых представлений, которые затем будет включать представление боковой панели, предоставляя при этом возможность (но не необходимость) переопределять или улучшать один или несколько методов виджета.

Что меня раздражает, так это то, что для тех представлений, которые не нуждаются в модификации, им все равно нужно явно указывать синтаксис класса Coffeescript.

Есть ли способ создать анонимный класс с синтаксисом Coffeescript? Можете ли вы сказать что-то вроде (следующий псевдокод):

thisclass = extend BackboneView
    initialize: (options) ->

Если так, то как?

1 Ответ

16 голосов
/ 12 мая 2011
thisclass = class extends BackboneView
    initialize: (options) ->
...