我一直在编写一些包装器代码,以使用dart:js从Dart访问Blockly API。一切都进行得很顺利,直到我需要将一个函数传递给JS端的Blockly事件注册函数之一为止。
Blockly中有问题的函数是addChangeListener()
(请参阅https://developers.google.com/blockly/installation/code-generators)。它使用0-arg函数作为回调。因此,我的目标是包装Dart函数,将其传递,并在事件触发时调用该函数。
在Dart中:
var blockly = context['Blockly'];
context['codeChangedCallback'] = (){
print('This should work, right?');
};
blockly.callMethod('addChangeListener', [context['codeChangedCallback']]);
当Blockly初始化时,我得到此堆栈跟踪:
我希望有人能指出我想念的显而易见的事情。
我觉得这可能与内部处理函数的方式特别相关,因为我尝试将函数传递给外部,并且效果很好。
最佳答案
问题在于,addChangeListener()回调的Arity为1,而Dart关心Arity。您的通话应如下所示:
var blockly = context['Blockly'];
blockly.callMethod('addChangeListener', [(var event) => print('Success!')]);