我一直在编写一些包装器代码来使用 dart:js 从 Dart 访问 Blockly API。一切都很顺利,直到我需要将一个函数传递给 JS 端的 Blockly 事件注册函数之一。
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 之外传递函数并且它工作正常。