6

私は流星を完全に掘り下げていますが、例のグローバル性を削減し、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' を呼び出せません

それで、何が足りないのですか?

4

2 に答える 2

2

Meteorにはアンダースコアが付いているので、次のことができます。

_.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
于 2012-05-17T20:56:35.897 に答える
1

@ を Template.Searchform に置き換えてみましたか。あなたのイベントバインディングで?

于 2012-05-20T20:32:19.747 に答える