我目前正在尝试将fullcalendar javascript库实现为有角度的2 dart webapp。 我在移植这个javascript代码时遇到了问题但是:
$('#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是一个简单的无趣类结构:
@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$1' (callback.call$1 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
})]);
答案 0 :(得分:0)
JS函数应该可以用
调用callback.apply([generated_events])