代码:
class FileTree
constructor: (@root_elem, @options, @handler) ->
_bind_tree: (t) ->
that = this
$(t).find('li a').bind('click', ->
func1 = (elem) =>
if( @options.some_option )
...
@options
转换为_this.options
的问题对于此内容有误:_this
在var _this = this
函数的情况下为=>
。
我在纯Javascript中使用that
变量解决了这个问题:
...
func1 = (elem) =>
if( that.options.some_option )
...
有没有使用临时变量的漂亮解决方案?
答案 0 :(得分:1)
假设您希望@options
成为FileTree构造函数中的@options
,您还需要在点击处理程序上使用胖箭头:
class FileTree
constructor: (@root_elem, @options, @handler) ->
_bind_tree: (t) ->
$(t).find('li a').bind('click', =>
func1 = (elem) =>
if @options.some_option
doStuff()
编译为:
FileTree.prototype._bind_tree = function(t) {
var _this = this; // will refer to the instance of FileTree
return $(t).find('li a').bind('click', function() {
var func1;
return func1 = function(elem) {
if (_this.options.some_option) {
return doStuff();
}
};
});
}