Было бы трудно использовать tKinter или какой-либо другой графический интерфейс (например, wxPython или pyQT) для реализации прослушивателя или другого интерфейса для обнаружения нажатия клавиши.
Проверить эту тему .
Не в этом случае. Вы создаете DOM, создавая строку, а затем преобразовывая ее. Функция, которую вы создаете из строки, не будет иметь никакого отношения к области, в которой вы находитесь.
Вместо этого используйте правильный DOM.
this.domNode.innerHTML = ""; // Erase existing content
this.domNode.appendChild(document.createTextNode("Click "));
var button = document.createElement("button"); // Don't use links to the top fo the page for this
button.appendChild(document.createTextNode("Here"));
button.addEventListener("click", this.toggleLayer.bind(this));
this.domNode.appendChild(button);
this.domNode.appendChild(document.createTextNode(" to toggle layer"));
«Dojo way» для привязки контекста к функции используется с помощью lang.hitch
:
hitch () возвращает функцию, которая будет выполнять заданную функцию в данном контексте.
blockquote>https://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#hitch
Вот как это делается сделано с чистым Dojo:
require([ 'dojo/_base/lang', 'dojo/dom', 'dojo/dom-construct', 'dojo/on' ], function( lang, dom, domConstruct, on ) { function onClick () { console.log('Got clicked context: ', this) } var link = domConstruct.create('a', { textContent: 'Click me!', href: '#' }, dom.byId('my-div')); on(link, 'click', lang.hitch(this, onClick)); });