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?
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? –