我一直在编写一些包装器代码,以使用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!')]);

09-06 04:44