sug*_*ane 0 javascript jquery coffeescript backbone.js jquery-file-upload
我遇到了jquery-file-upload和Backbone的上下文问题.在fileupload'完成'回调中,我想调用Backbone视图中定义的另一个函数,但是我丢失了上下文.
class MyBackboneView extends Backbone.view
initialize_fileupload: ->
$('form#my_form').fileupload
done: (e, data) ->
this.some_function()
some_function: ->
...
Run Code Online (Sandbox Code Playgroud)
浏览器控制台中返回的错误是"未捕获的TypeError:对象#没有方法'some_function'",因为"this"不再引用Backbone视图,而是引用jquery表单元素.
有没有办法从回调中访问视图中的该函数?
每个function(->)都有自己的context(this).这包括done: (e, data) -> ...,以及initialize_fileupload: -> ....并且,在这种情况下,它们每个都有自己的上下文值,因此this.some_function()不引用您的view.
因此,您必须定义done以保持周围的上下文(view).这可以通过使用" 胖箭头 "(=>)来定义它来在CoffeeScript中完成:
initialize_fileupload: ->
$('form#my_form').fileupload
done: (e, data) =>
this.some_function()
Run Code Online (Sandbox Code Playgroud)
它也可以通过将上下文值存储在范围变量中来实现:
initialize_fileupload: ->
thisView = this
$('form#my_form').fileupload
done: (e, data) ->
thisView.some_function()
Run Code Online (Sandbox Code Playgroud)
或者通过将函数绑定到周围的上下文:
initialize_fileupload: ->
$('form#my_form').fileupload
done: ((e, data) ->
this.some_function()
).bind(this)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |