我有一个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()
调用中访问视图属性?
答案 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/