调用 javascript 函数,该函数作为参数从 javascript 库传递

Calling a javascript function, which is passed as a parameter from a javascript library

我目前正在尝试将 fullcalendar javascript 库实现到 angular 2 dart webapp 中。 我在将此 javascript 代码移植到 dart 时遇到问题:

$('#fullCalendar').fullCalendar(
{
    events: function(start, end, timezone, callback) {
        var generated_events=[
        {
            title  : 'test',
            start  : '2016-08-08'
        }];
        callback(generated_events);
    },
    allDaySlot: false
    //More options can go here
});

我已经能够使用以下代码将 dart 函数传递给 events 参数:

context.callMethod(r'$',['#fullCalendar'])
        .callMethod('fullCalendar',[new JsObject.jsify({
        'events': (start, end, timezone, callback){
            print("called!");
            List<FullCalendarEvent> generated_events= [
                new FullCalendarEvent(title: "test", start: "2016-08-08")
            ];
            try{
                callback(generated_events);
            }catch(exception,stackTrace){
                print("Caught exception!");
                print(exception);
                print(stackTrace);
            }
        },
        'allDaySlot': false
        //more options can go here
    })]);

其中 FullCalendarEvent 是一个简单的匿名 class 结构:

@JS()
@anonymous
class FullCalendarEvent{
    external String get title;
    external set title(String v);

    external String get start;
    external set start(String v);

    external factory FullCalendarEvent({
        String title,
        String start
    });
}

但是 callback(generated_events); 抛出这个异常:

NoSuchMethodError: method not found: 'call' (callback.call is not a function)

编辑:

在 Günter 的回复的帮助下,我设法解决了问题。而不是做 callback(generated_events); 我而是使用 callback.apply([generated_events]); 另外而不是使用

List<FullCalendarEvent> generated_events= [
    new FullCalendarEvent(title: "test", start: "2016-08-08")
];

我改为使用:

var generated_events = new JsObject.jsify([{'title':'test','start':'2016-08-08'}]);

我的工作代码如下所示:

context.callMethod(r'$',['#fullCalendar'])
    .callMethod('fullCalendar',[new JsObject.jsify({
        'events': (start, end, timezone, callback){
            print("called!");
            var generated_events = new JsObject.jsify([{'title':'test','start':'2016-08-08'}]);
            try{
                callback.apply([generated_events]);
            }catch(exception,stackTrace){
                print("Caught exception!");
                print(exception);
                print(stackTrace);
            }
        },
        'allDaySlot': false
        //more options can go here
    })]);

一个 JS 函数应该可以用

调用
callback.apply([gen‌​erated_events])