在coffeescript类中包装meteor.js把手模板

时间:2012-05-17 17:12:41

标签: coffeescript meteor handlebars.js

我完全在挖掘流星,但我不得不试图减少示例的全局性并添加一些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'

那么缺少什么?

2 个答案:

答案 0 :(得分:2)

流星带有下划线,所以你可以:

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

答案 1 :(得分:1)

您是否尝试使用Template.Searchform替换@。你的事件绑定?