调用 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([generated_events])
我目前正在尝试将 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([generated_events])