有没有更好的方法使一个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?

查看:78
本文介绍了有没有更好的方法使一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆