2012-05-17 12 views
6

jestem całkowicie kopanie na meteor, ale utknąłem próbując zmniejszyć globalną-ności przykładów i dodać odrobinę OOP.owijania meteor.js Kierownice szablony w coffeescript klas

Obecnie mój kod wygląda następująco:

# 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 

Ale a la kręgosłup lub szkielet, co naprawdę chciałbym mieć to coś takiego:

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 

Co znajduje się w prawo sposób na zawijanie szablonu kierownicy w meteorze?

udało mi się owinąć Meteor.Collection, ale dlatego, kierownice nazwy obiektu po szablonie, nie jestem pewien sposób prawo to zrobić na szablonie.

AKTUALIZACJA

@greg wskazał, że można użyć _.extend aby dodać właściwości. To działa, ale co jeśli chciałbym spasować metody obsługi zdarzeń "query_submitted" i "clear_query_field" w klasie? Coś takiego:

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

nie do końca pracy. Do obsługi zdarzeń nie są nazywane prawidłowo i pojawiają się błędy w konsoli jak:

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

Podobnie

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

Daje:

Uncaught TypeError: Cannot call method 'call' of undefined

Więc czego brakuje?

Odpowiedz

2

Meteor pochodzi z podkreśleniem tak możesz:

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

Dzięki, @greg! Znalazłem rozwiązanie _.extend, ale wciąż mam problemy z rozszerzeniem o funkcje obsługi zdarzeń. Zaktualizowałem pytanie, czy mógłbyś rzucić okiem? –

1

Czy próbowali zastępując @ z Template.Searchform. w powiązaniach zdarzeń?

+0

To działa, jeśli najpierw przedłużyć z ładowarki, a następnie rozszerzyć dzięki definicji zdarzenia: 'Template.SearchForm _.extend, clear_query_field: (event) -> bla bla _.extend Template.SearchForm zdarzeń: „ostrości #query”: clear_query_field ... ' –

+0

@ScottSimon można zapewnić aktualizację w oryginalne pytanie, dotyczące swoich ustaleń. tks –