使用回调中的集合呈现骨干视图

时间:2012-04-01 20:24:49

标签: backbone.js coffeescript

以下是我正在使用的观点:

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))这样的东西?

2 个答案:

答案 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的人可以纠正我:)