私は流星を完全に掘り下げていますが、例のグローバル性を削減し、OOP のダッシュを追加しようとして立ち往生しています。
現在、私のコードは次のようになっています。
# 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
しかし、背骨やバックボーンとして、私が本当に欲しいのは次のようなものです:
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
流星でハンドルバー テンプレートをラップする正しい方法は何ですか?
Meteor.Collection をラップすることはできましたが、ハンドルバーはテンプレートの後にオブジェクトに名前を付けているため、テンプレートに対してそれを行う正しい方法がわかりません。
更新しました
@greg は、_.extend を使用してプロパティを追加できることを指摘しました。これは機能しますが、イベント ハンドラー メソッド 'query_submitted' と 'clear_query_field' をクラスにフォールドしたい場合はどうすればよいでしょうか? このようなもの:
_.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()
うまくいきません。イベント ハンドラーが正しく呼び出されず、コンソールに次のようなエラーが表示されます。
キャッチされていない TypeError: オブジェクト [オブジェクト ウィンドウ] にはメソッド 'query_submitted' がありません
同様に、
events :
'submit #search_form' : (e) -> @query_submitted(e)
与えます:
キャッチされていない TypeError: 未定義のメソッド 'call' を呼び出せません
それで、何が足りないのですか?