2

我一直在玩 dart 的新 js interop。到目前为止,一切都非常简单。但我不确定的一件事是如何处理这样的 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
  }));

但这肯定不理想。有任何想法吗?

4

2 回答 2

3

语法如下:

@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 对象:

于 2015-10-28T17:33:37.643 回答
2

由于最近的更新,@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
}));
于 2015-10-28T15:45:55.850 回答