使用https://pub.dartlang.org/packages/js以这种方式连接js类,可以正常工作:
@JS()
class ObjJS {
external ObjJS();
external String fullName();
}
现在我想在另一个类中公开该方法,所以我只通过复制方法解决了这个问题。当增加更多方法时,这会有效,但会增长。需要的是某种混合或继承,但不适用于此互操作类。 jselem
是库名
class ObjDart {
jselem.ObjJS _objJS = new jselem.ObjJS();
String fullName(){
return _objJS.fullName();
}
}
有更优雅的方法可以解决这个问题吗?
更新以获得更好的说明
事情有效,问题在于是否有更好的方法来公开接口Javascript类的方法/属性。上面的例子很小,所以不是那么说明性的。为了更好地说明,请从此处ChartDataSet
:https://github.com/google/chartjs.dart/blob/master/lib/chartjs.dart仅举例说明,在Dart一侧创建了一个Dart类StreamChartDataSet
,它增加了在线阅读功能来自网址的数据。由于StreamChartDataSet
无法从ChartDataSet
继承或混合,因此上述解决方案提供了:
class StreamChartDataSet {
ChartDataSet _chartDataSet;
...
String get label => _chartDataSet.label;
set label(fial String v) => _chartDataSet.label(v);
...
}
这是许多方法和纯机械工作。完成后,只希望ChartSettings
未经修改:-)我正在处理其他事情,但使用Charjs.dart进行说明。
答案 0 :(得分:2)
为了澄清,您希望能够扩展@JS()
注释类,这是正确的吗?我不认为有效,因为@JS()
类在编译时才真正存在。
几个选项:
有人可以开发一个代码生成器来查看@JS()
- 带注释的类,并通过基本完成你正在为你做的事情来删除样板。不是超级优雅,但至少有帮助。
您可以针对包提交错误:js以支持扩展。
在我看来,我是一个巨大的支持者,包括扩展的构图,特别是在你没有直接控制的课程上。例如,如果JS-API从fullName更改为firstName和lastName,则只需更改getter即可维护相同的API:
String fullName() => _js.firstName + _js.lastName;
这取决于你。