我一直在编写一些包装器代码,使用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之外传递函数并且它工作正常。
答案 0 :(得分:3)
问题是addChangeListener()回调的arity为1,Dart关心arity。你的电话应该是这样的:
var blockly = context['Blockly'];
blockly.callMethod('addChangeListener', [(var event) => print('Success!')]);
答案 1 :(得分:2)
我认为这应该有用
var blockly = context['Blockly'];
context['codeChangedCallback'] = (){
print('This should work, right?');
};
blockly.callMethod('addChangeListener', [(){
print('This should work, right?');
}]);