将dart对象传递给js interop中的js函数

时间:2015-10-28 15:17:01

标签: dart dart-js-interop

我一直在玩新的js interop of dart。到目前为止,一切都非常直截了当。但有一点我不确定如何处理这样的js:

MathJax.Hub.Config({
  showProcessingMessages: false,
  showMathMenu: false
  .. many other different options
});

我可以翻译MathJax.Hub.Config部分:

@JS('MathJax') external MathJaxClass get MathJax;
class MathJaxClass {
  external HubClass get Hub;
}

@JS('MathJax.Hub')
class HubClass {
  external void Config(options);
}

但是现在我希望将options函数的Config参数作为Dart对象。我不知道该怎么做。唯一的方法是,我可以使用Map

获得一些有效的方法
  MathJax.Hub.Config(new JsObject.jsify({
    'showProcessingMessages': false,
    'showMathMenu': false
  }));

但这肯定不理想。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

自最近更新以来,@anonymous注释用于从Dart类而不是工厂构造函数创建JS对象。

@JS()
@anonymous
class Config {
  external bool get showProcessingMessages;
  external set showProcessingMessages(bool value);
  external bool get showMathMenu;
  external set showMathMenu(bool value);
}

MathJax.Hub.Config(new Config()
  ..showProcessingMessages= false
  ..showMathMenu = false
}));

答案 1 :(得分:1)

语法如下:

@anonymous
@JS()
class Config {
  external bool get showProcessingMessages;
  external bool get showMathMenu;

  external factory Config({bool showProcessingMessages, bool showMathMenu});
}

此处Config名称与任何javascript名称都不匹配,因此您可以根据需要为其命名。然后你可以这样称呼它:

MathJax.Hub.Config(new Config(
  showProcessingMessages: false,
  showMathMenu: false
));

传递给js函数的对象将是一个常规的javascript对象: