2012-05-17 7 views
6

Estoy investigando meteoros, pero estoy atrapado tratando de reducir la globalidad de los ejemplos y agrego una pizca de OOP.Envolviendo plantillas de handlebars de meteor.js en las clases de coffeescript

Actualmente, mi código es el siguiente:

# View for Search Form 
form = Template.SearchForm 
form.events = 
    'submit #search_form' : query_submitted 
    'click #load_more' : -> Songs.get_next_page() 
    'focus #query' : clear_query_field 

form.page = -> Songs.page 
form.total_pages = -> Songs.total_pages 

Pero, a la columna vertebral o espina dorsal, lo que realmente me gustaría tener algo como esto:

class SearchForm extends Template.SearchForm 
    events: 
    'submit #search_form' : query_submitted 
    'click #load_more' : -> Songs.get_next_page() 
    'focus #query' : clear_query_field 


    page : -> Songs.page 
    total_pages : -> Songs.page 

    # etc etc 

form = new SearchForm 

¿Cuál es la correcta forma de envolver una plantilla de manillar en meteorito?

He logrado envolver Meteor.Collection, pero debido a que el nombre del manubrio es el objeto después de la plantilla, no estoy seguro de la forma correcta de hacerlo para la plantilla.

ACTUALIZADO

@ Greg señaló que se puede utilizar para agregar _.extend las propiedades. Eso funciona, pero ¿qué ocurre si quiero plegar los métodos del manejador de eventos 'query_submitted' y 'clear_query_field' en la clase? Algo como esto:

_.extend Template.SearchForm, 
    events : 
    'submit #search_form' : @query_submitted 
    'click #load_more' : -> Songs.get_next_page() 
    'focus #query' : @clear_query_field 

    page : -> Songs.page 
    total_pages : -> Songs.total_pages 

    clear_query_field : (event) -> 
    console.log 'focus' 

    query_submitted : (event) -> 
    event.preventDefault() 
    Songs.clear() 
    Songs.query = $('#query')[0].value 
    Songs.search() 

No funciona del todo. Los controladores de eventos no están siendo llamados correctamente y se producen errores en la consola como:

Uncaught TypeError: Object [object Window] has no method 'query_submitted'

Del mismo modo,

events : 
    'submit #search_form' : (e) -> @query_submitted(e) 

Da:

Uncaught TypeError: Cannot call method 'call' of undefined

Entonces, ¿qué falta?

Respuesta

2

Meteor viene con guión bajo por lo que podría:

_.extend Template.SearchForm, 
    events: 
    'submit #search_form' : query_submitted 
    'click #load_more' : -> Songs.get_next_page() 
    'focus #query' : clear_query_field 

    page: -> Songs.page 

    total_pages: -> Songs.page 
+0

Gracias, @greg! Encontré la solución _.extend, pero todavía tengo problemas para incluir las funciones del controlador de eventos. He actualizado la pregunta, ¿echarías un vistazo? –

1

has necesitado reemplazar @ con Template.Searchform. en tus enlaces de eventos?

+0

Esto funciona si primero se extiende con los controladores, a continuación, extender de nuevo con las definiciones de eventos: 'Template.SearchForm _.extend, clear_query_field: (evento) -> bla bla _.extend Template.SearchForm eventos: 'focus #query': clear_query_field ... ' –

+0

@ScottSimon podría proporcionar una actualización de su pregunta original, con respecto a sus conclusiones. tks –

Cuestiones relacionadas