在coffeescript类中包装meteor.js Handlebar模板
我完全在挖掘meteor,但我一直在努力减少示例的全局性,并添加少量OOP 目前,我的代码如下所示:在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
# 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