【问题标题】:How to define a method for the class 'Proxy' in Dart js-interop?如何在 Dart js-interop 中为“代理”类定义方法?
【发布时间】:2013-04-09 16:11:56
【问题描述】:

我目前正在调用一个名为 Bootstrap Context Menu 的基于 jQuery 的插件。

为了调用它,我需要使用Javascript Interop library。但是当我从中调用 jQuery 方法时,我收到以下警告:

The method 'jQuery' is not defined for the class 'Proxy'

代码sn-p:

  js.scoped(() {
    js.context.jQuery('#canvas').contextmenu();
  });

这在一些 dart/js-interop 更新之前没有发生。消除此警告的正确方法是什么?

【问题讨论】:

    标签: dart dart-js-interop


    【解决方案1】:

    您收到此警告是因为新分析器似乎不知道选项在类定义 noSuchMethod() 时报告“没有此类成员”警告(报告于 http://dartbug.com/10016)。如果您切换回 legacy 分析器,您应该不会再看到此警告。

    也就是说,如果你想使用新的分析器并摆脱这个警告,你可以像这样使用数组表示法:

    js.context["jQuery"]('#canvas')["contextmenu"]();
    

    但是:

    • 方法调用的可读性较差。
    • 方法调用效率较低,因为完成了 2 个操作(f = js.context["jQuery"] 后跟 f('#canvas'))而不是 1 个(js.context.jQuery('#canvas')

    【讨论】:

    • 谢谢,那我们应该在 dartbug 中打开一个新问题吗?我同意你的观点,它降低了代码的可读性和效率。
    • 是的,应该打开一个新问题。它对方法的效率较低,但对属性却没有(快 10% 左右)。然而,数组表示法有一些优点:它使用 dart2xxx 使代码更小,并且可以使用 --minify - 请参阅dartbug.com/9283
    • 关于这个答案的两个问题。首先,为什么在示例中使用单引号和双引号?它对所有双引号或所有单引号都有效吗?其次,既然有了“dart:js”,那么从 Dart 调用 jQuery 的首选方式是什么?谢谢。
    • 1/ Dart 中的单引号和双引号没有区别。 2/ 视情况而定。如果代码大小无关紧要,package:js 提供更简洁的 API(js.context.jQuery('#canvas').contextMenu() vs js.context.callMethod('jQuery', ['#canvas']).callMethod('contextmenu') with dart:js
    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多