С использованием функции addChangeListener() Blockly из Dart (js interop)
Я написал некоторый код-обертку для доступа к Blockly API из Dart, используя dart:js. Все идет гладко, пока мне не нужно передать функцию одной из функций регистрации событий Blockly на стороне JS.
Рассматриваемая функция в Blockly addChangeListener()
(см. https://developers.google.com/blockly/installation/code-generators). Она принимает функцию 0-arg в качестве обратного вызова. Поэтому моя цель - обернуть функцию Dart, передать ее и вызвать эту функцию при возникновении события.
В дартс:
var blockly = context['Blockly'];
context['codeChangedCallback'] = (){
print('This should work, right?');
};
blockly.callMethod('addChangeListener', [context['codeChangedCallback']]);
Когда Blockly инициализируется, я получаю следующую трассировку стека:
Я надеюсь, что кто-то может указать на что-то очевидное, что я пропустил.
У меня есть ощущение, что это может быть связано именно с тем, как blockly обрабатывает функцию внутри, потому что я пытался передать функцию за пределами blockly, и она работала нормально.
2 ответа
Проблема в том, что обратный вызов addChangeListener() имеет арность единицу, а Дарт заботится о арности. Ваш звонок должен выглядеть так:
var blockly = context['Blockly'];
blockly.callMethod('addChangeListener', [(var event) => print('Success!')]);
Я думаю, что это должно работать
var blockly = context['Blockly'];
context['codeChangedCallback'] = (){
print('This should work, right?');
};
blockly.callMethod('addChangeListener', [(){
print('This should work, right?');
}]);