2011-05-12 12 views
6

tengo un lenguaje CoffeeScript/espina dorsal de trabajo que tiene este aspecto:¿Cómo se hacen las clases anónimas en Coffeescript?

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()) 
     ) 

La intención de este idioma es el de proporcionar una lista de columna vertebral puntos de vista que la de la barra lateral será luego incorporar, al tiempo que proporciona la oportunidad (pero no la necesidad) de anular o mejorar uno o más métodos de un widget.

Lo que me molesta es que, para aquellas vistas que hacen no modificación necesidad, todavía necesitan ser nombrado explícitamente por la sintaxis de la clase CoffeeScript.

¿Hay una manera de crear una clase anónima con la sintaxis CoffeeScript? ¿Puedes decir algo como (el siguiente es un pseudocódigo):

thisclass = extend BackboneView 
    initialize: (options) -> 

Si es así, ¿cómo?

Respuesta

16
thisclass = class extends BackboneView 
    initialize: (options) -> 
+0

Bien, ahora me siento tonto por no intentar eso. Funciona muy bien, incluso en un ciclo de subrayado "extender". ¡Gracias! –

+0

@ElfSternberg tú y yo ambos. – Erik

Cuestiones relacionadas