从ajax success()调用中访问视图

时间:2012-01-25 15:40:27

标签: backbone.js coffeescript

我有一个backbone.js视图,它有以下ajax调用:

BackboneDemo.Views.Projects.ProjectView extends Backbone.View

  demoFunction: () ->
    ...
    ...
    @collection.create(new_project_attributes,
      success: ->
        console.log @
        $('#' + @options.query_id).html('Saved successfully').delay(1500).fadeOut(500, -> $(@).remove())

问题是,成功通话中的this会返回DOMWindow,而不是@options.query_id所在的视图。 (是的,demoFunction绑定到视图)。

如何从Backbone中的AJAX success()调用中访问视图属性?

2 个答案:

答案 0 :(得分:3)

最简单的方法(不调用某种“绑定”辅助函数)就是在本地存储对你想要使用的this的引用:

demoFunction: () ->
    ...
    var self = this;
    @collection.create(attrs, success: ->
        // use self.options.query_id
        ...

答案 1 :(得分:3)

惯用的CoffeeScript方法是使用fat arrow将回调函数绑定到您希望它的this

  

胖箭头=>可以用来定义一个函数,并将其绑定到当前值this,就在现场。当使用基于回调的库(如Prototype或jQuery,...)时,这很有用。

这样的事情:

@collection.create(new_project_attributes,
  success: =>
    console.log @
    $('#' + @options.query_id).html('Saved successfully').delay(1500).fadeOut(500, -> $(@).remove())

看起来你希望this成为你在内部回调中淡出的元素,所以你只留下那个细箭头(->)。

简单演示=>->之间的区别:http://jsfiddle.net/ambiguous/vGHrM/