2014-09-29 63 views
2

現在,我試圖學習dart語言,並且遇到了一個問題。首先,一些代碼。 _clickHandler和_constructNode是同一類在事件處理程序中提供對實例的訪問

EventListener _clickHandler = (Event e){ 
    this.setActive(e.currentTarget); 
    }; 

    /* Render methods */ 

    Element _constructNode(Node node){ 
     DivElement nodeContainer = new DivElement(); 
     nodeContainer.id = "node-${node.id.toString()}"; 
     nodeContainer.classes.add("node"); 


     SpanElement nodeTitle = new SpanElement(); 
     nodeTitle.text = node.value; 
     nodeTitle.addEventListener('click', this._clickHandler); 

     nodeContainer.append(nodeTitle); 

     return nodeContainer; 
    } 

所以,_clickHandler breakes的 「此」 的方法:

receiver 'this' is not in scope 

我怎麼能在事件處理程序使用 「this」 指針?

回答

2

我想刪除=;(最後)將足以使您的代碼工作。

EventListener _clickHandler(Event e){ 
    this.setActive(e.currentTarget); 
} 

你讓_clickHandler字段引用關閉和封閉你沒有this。將其更改爲方法將使其按預期工作。

+0

Thx。我完全忘記了這種封閉方式。 – GeraldIstar 2014-09-29 13:40:16

+0

花了我幾秒鐘,直到我看到它。我想知道爲什麼該方法有一個';'結束;-) – 2014-09-29 13:41:08