2014-09-29 2 views
2

На данный момент я пытаюсь изучить язык дартс и встал с проблемой. Во-первых, некоторый код. _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 на ломает "это":

receiver 'this' is not in scope 

Как я могу использовать "это" указатель на обработчик события?

ответ

2

Я думаю, что удаление = и ; (в конце) будет достаточным для того, чтобы ваш код работал.

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

Вы делаете _clickHandler поля ссылки замыкания и в замыкании у вас нет this. Изменение его на метод заставит его работать должным образом.

+0

Thx. Я полностью забываю о закрытии таким образом. – GeraldIstar

+0

Взял меня на несколько секунд, пока не увидел. Я задавался вопросом, почему у метода есть ';' a end ;-) –

Смежные вопросы