首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在js互操作回调函数中,Uncaught“不是一个函数”

在js互操作回调函数中,Uncaught“不是一个函数”
EN

Stack Overflow用户
提问于 2018-11-21 12:26:26
回答 1查看 1.2K关注 0票数 2

我创建了这个示例项目:https://github.com/mfMeds/jsdart来重现我的错误。

错误:

代码语言:javascript
复制
main.dart.js:5036 Uncaught TypeError: J.ab(...).ge5 is not a function
    at Object.J.fm (main.dart.js:5036)
    at cH.dart.cH.eu (main.dart.js:4962)
    at Object.eval (eval at di (main.dart.js:786), <anonymous>:3:36)
    at Object.ir (main.dart.js:628)
    at dart.kZ (main.dart.js:4005)
    at ChartElement.<anonymous> (main.dart.js:3998)
    at ChartElement.update (Chart.js:8803)
    at ChartElement.handleEvent (Chart.js:9100)
    at Chart.eventHandler (Chart.js:4521)
    at listener (Chart.js:4455)

只有当我使用变量a的属性时,我才会得到这个错误。使用window.console.log(a),它是在无错误的情况下记录对象。

我的错误发生在这里:https://github.com/mfMeds/jsdart/blob/master/lib/src/zgraph/zgraph.dart#L80

代码语言:javascript
复制
@override
ngAfterViewInit() {
  List<String> myDays = new List();
  List<double> myData = new List();

  myDays.add('Monday');
  myData.add(12.0);

  var data = new LinearChartData(labels: myDays, datasets: <ChartDataSets>[
    new ChartDataSets(label: 'My Label', steppedLine: true, data: myData),
  ]);

  var aOptions = new ChartAnimationOptions();

  var config = new ChartConfiguration(
      type: 'bar',
      data: data,
      options: new ChartOptions(
          responsive: true,
          maintainAspectRatio: false,
          legend: new ChartLegendOptions(display: false),
          //scales: new ChartScales(yAxes: [new ChartYAxe(ticks: new TickOptions(max:20))]),
          animation: aOptions,
          tooltips: new ChartTooltipOptions(
            enabled: false,
            custom: allowInterop(customTooltip), // <-- binding the method here
          )));

  new Chart(mycanvas, config);
}

void customTooltip(dynamic a) {
  window.console.log(a);
  if (a.opacity == 0) { // <-- The error happens here
    //tooltipEl.style.opacity = '0';
    return;
  }
}

当我像这样为应用程序服务时,一切都正常:

代码语言:javascript
复制
pub global run webdev serve web:xxxx. 

只有在像这样构建应用程序时,我才会得到以下错误:

代码语言:javascript
复制
pub global run webdev build --output=web:build
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-22 08:20:30

在文档中,它们编写: JavaScript对象的属性可以通过[]和[]=操作符访问。方法可以通过callMethod调用。

我也试过了,但不管用.

我找到了另一个解决办法。dynamic是一个js对象。您可以使用js.getProperty访问js对象,我为此创建了一个类:

代码语言:javascript
复制
import 'package:js/js_util.dart' as js;


class JsObject {
  final dynamic _object;

  const JsObject(this._object);

  dynamic operator[](String name) => js.getProperty(_object, name);
  operator[]=(String name, dynamic value) => js.setProperty(_object, name, value);
}

然后,您可以使用

代码语言:javascript
复制
// a is your js object
var jsA = new JsObject(a);
jsA['YOUR_PROPERTY']
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53412011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档