在coffeescript类中包装meteor.js Handlebar模板

在coffeescript类中包装meteor.js Handlebar模板,coffeescript,meteor,handlebars.js,Coffeescript,Meteor,Handlebars.js,我完全在挖掘meteor,但我一直在努力减少示例的全局性,并添加少量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 fo

我完全在挖掘meteor,但我一直在努力减少示例的全局性,并添加少量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
_.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()
但是,一个la脊椎或脊椎,我真正想要的是这样的东西:

# 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
_.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()
用meteor包裹车把模板的正确方法是什么

我已经设法包装Meteor.Collection,但由于Handlebar以模板命名对象,我不确定为模板命名的正确方法

已更新

@greg指出,可以使用x.extend添加属性。这是可行的,但是如果我想将事件处理程序方法“query\u submitted”和“clear\u query\u field”折叠到类中呢?大概是这样的:

# 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
_.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()
不太管用。没有正确调用事件处理程序,控制台中出现如下错误:

未捕获类型错误:对象[Object Window]没有方法 “已提交查询”

同样地

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

未捕获的TypeError:无法调用未定义的方法“call”


那么缺少什么呢?

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

您是否尝试过用Template.Searchform替换@。在您的活动绑定中?

谢谢@greg!我找到了ux.extend解决方案,但在扩展到包含事件处理程序函数时仍然遇到问题。我已经更新了这个问题,您能看一下吗?如果您先使用处理程序进行扩展,然后再使用事件定义进行扩展,这会起作用:
.extend Template.SearchForm,clear\u query\u field:(event)->yadda yadda\udda.extend Template.SearchForm events:“focus#query”:clear\u query\u field
@ScottSimon您能否就您的调查结果在原始问题中提供最新信息。tks