2012-05-17 10 views
6

Sto scavando completamente sulla meteora, ma sono bloccato cercando di ridurre la globalizzazione degli esempi e aggiungere un pizzico di OOP.Disposizione dei modelli di manubri meteor.js nelle classi di coffeescript

Attualmente, il mio codice è simile al seguente:

# 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 

Ma, alla colonna vertebrale o spina dorsale, quello che mi piacerebbe davvero avere è qualcosa di simile:

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 

Qual è il diritto modo di avvolgere un modello di manubri in meteora?

Sono riuscito a racchiudere Meteor.Collection, ma poiché i manubri chiamano l'oggetto dopo il modello, non sono sicuro del modo corretto di farlo per il modello.

AGGIORNATO

@ Greg ha sottolineato che è possibile utilizzare _.extend per aggiungere le proprietà. Funziona, ma cosa succede se voglio piegare i metodi del gestore di eventi 'query_submitted' e 'clear_query_field' nella classe? Qualcosa del genere:

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

Non funziona. I gestori di eventi non vengono chiamati correttamente e ottengo errori nella console come:

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

Allo stesso modo,

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

Dà:

Uncaught TypeError: Cannot call method 'call' of undefined

Allora cosa manca?

risposta

2

Meteor viene fornito con sottolineatura così si potrebbe:

_.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

Grazie, @greg! Ho trovato la soluzione _.extend, ma sto ancora avendo problemi ad estendere per includere le funzioni del gestore di eventi. Ho aggiornato la domanda, vorresti dare un'occhiata? –

1

Hai provato sostituire @ con Template.Searchform. nel tuo evento binding?

+0

Questo funziona se prima estendere con i gestori, quindi estendere di nuovo con le definizioni di eventi: 'Template.SearchForm _.extend, clear_query_field: (evento) -> bla bla _.extend Template.SearchForm eventi: "focus #query": clear_query_field ... ' –

+0

@ScottSimon è possibile fornire un aggiornamento nella domanda originale, in merito ai risultati. tks –