0

コード:

    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は、この内容では間違っています:関数_thisvar _this = this場合です=>

この問題はthat、純粋な Javascript のように変数を使用して解決します。

 ...

func1 = (elem) =>
    if( that.options.some_option ) 
 ...

中間変数を使用しないで解決策はありますか?

4

1 に答える 1

1

@optionsFileTree コンストラクターの元になりたいと仮定すると@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();
      }
    };
  });
}
于 2013-11-05T17:14:51.067 に答える