使用来自Dart(js interop)的Blockly的addChangeListener()函数

时间:2014-11-02 21:25:13

标签: dart dart-js-interop blockly

我一直在编写一些包装器代码,使用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初始化时,我得到了这个堆栈跟踪:

stack trace screen shot

我希望有人可以指出一些我错过的明显事实。

我有一种感觉,这可能与blockly在内部处理函数的方式有关,因为我尝试在blockly之外传递函数并且它工作正常。

2 个答案:

答案 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?');
}]);