有没有更好的方法使一个Dart类的方法从JS可调用新的js 0.6.0包? [英] Is there a better way to make a method of a Dart class callable from JS with the new js 0.6.0 package?
本文介绍了有没有更好的方法使一个Dart类的方法从JS可调用新的js 0.6.0包?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
index.html(head)
< script&
var callDartMethod = function(dartObject){
return dartObject.fullName();
}
< / script>
index.dart
import'package:js / js.dart';
@Js()//要更改为@JS
external String callDartMethod(p);
main(){
final p = Person.create(firstName:'Günter',lastName:'Zöchbauer');
print(callDartMethod(p)); //从JS中间接调用
// print(p.fullName()); //从Dart直接调用
}
@Js()//要更改为@JS
class Person {
external String get firstName;
external set firstName(String firstName);
external String get lastName;
external set lastName(String lastName);
external function get fullName;
external set fullName(Function function);
external factory Person({String firstName,String lastName});
static Person create({String firstName,String lastName})=>
new Person(firstName:firstName,lastName:lastName)
//工作但感觉有点麻烦
..fullName = allowInteropCaptureThis(fullNameImpl);
static String fullNameImpl(self)=> '$ {self.firstName} $ {self.lastName}';
}
解决方案
/ p>
pkg / js
目前专注于让Dart应用程式使用JavaScript程式库。
我们希望能够更轻松地将使用Dart编写的API导出到JavaScript消费者,但这将会更晚。
index.html (head)
<script>
var callDartMethod = function(dartObject) {
return dartObject.fullName();
}
</script>
index.dart
import 'package:js/js.dart';
@Js() // about to being changed to @JS
external String callDartMethod(p);
main() {
final p = Person.create(firstName: 'Günter', lastName: 'Zöchbauer');
print(callDartMethod(p)); // indirect call from JS
// print(p.fullName()); // call from Dart directly
}
@Js() // about to being changed to @JS
class Person {
external String get firstName;
external set firstName(String firstName);
external String get lastName;
external set lastName(String lastName);
external Function get fullName;
external set fullName(Function function);
external factory Person({String firstName, String lastName});
static Person create({String firstName, String lastName}) =>
new Person(firstName: firstName, lastName: lastName)
// works but feels a bit cumbersome
..fullName = allowInteropCaptureThis(fullNameImpl);
static String fullNameImpl(self) => '${self.firstName} ${self.lastName}';
}
解决方案
Short answer: no.
pkg/js
is currently focused on letting a Dart app consume JavaScript libraries.
We want to make it easier to export APIs written in Dart to JavaScript consumers, but that will come later.
这篇关于有没有更好的方法使一个Dart类的方法从JS可调用新的js 0.6.0包?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文