1

我一直在编写一些包装器代码来使用 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 之外传递函数并且它工作正常。

4

2 回答 2

3

问题是 addChangeListener() 回调的元数为 1,而 Dart 关心的是元数。您的电话应如下所示:

var blockly = context['Blockly'];

blockly.callMethod('addChangeListener', [(var event) => print('Success!')]);
于 2014-12-01T23:00:04.850 回答
2

我认为这应该有效

var blockly = context['Blockly'];

context['codeChangedCallback'] = (){
   print('This should work, right?');
};  

blockly.callMethod('addChangeListener', [(){
   print('This should work, right?');
}]);
于 2014-11-03T05:09:59.420 回答