以下是我正在使用的观点:
class Raffler.Views.EntriesIndex extends Backbone.View
template: JST['entries/index']
initialize: ->
@collection.on('reset', @render, this)
render: ->
Raffler.entries = @collection
$(@el).html(@template(eventSource: (start, end, callback) ->
console.log @collection # = undefined
callback(Raffler.entries.events(start, end))
))
我必须将window.Raffler属性分配给我的集合才能在回调中使用它。有没有一种很好的方式来使用像callback(@collection.events(start, end))
这样的东西?
答案 0 :(得分:1)
initialize
如果您this.bindAll(this);
,this.collection
内部render
应该在{{1}}内工作。
答案 1 :(得分:1)
在coffeescript中,如果您使用“胖箭头”(=>
)运算符而不是->
,则您的回调函数将绑定到this
(@
)在其创建范围内。这意味着您可以在回调中使用@collection,并且@将正确引用您的EntriesIndex,因此您的渲染函数可能如下所示:
render: ->
$(@el).html(@template(eventSource: (start, end, callback) =>
console.log @collection # == your EntriesIndex collection
callback(@collection.events(start, end))
))
请参阅http://coffeescript.org/#fat_arrow
我的建议仅在this
(@
)引用渲染中的EntriesIndex时才有效,所以我相信您可能必须按照亚伯拉罕的建议行事,并确保将@绑定到您的渲染函数中的EntriesIndex。添加此内容进行初始化:
_.bindAll this
如果我对该语法的错误,那么知道Coffeescript的人可以纠正我:)