Uncaught TypeError "не является функцией" в функции обратного вызова js interop - PullRequest
0 голосов
/ 21 ноября 2018

Я создал этот пример проекта: https://github.com/mfMeds/jsdart для воспроизведения моей ошибки.

Ошибка:

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

@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;
  }
}

Когда я так обслуживаю приложение, все работает:

pub global run webdev serve web:xxxx. 

Только при таком создании приложения я получаю эту ошибку:

pub global run webdev build --output=web:build

1 Ответ

0 голосов
/ 22 ноября 2018

В документации они пишут: Свойства объекта JavaScript доступны через операторы [] и [] =.Методы вызываются через callMethod.

Я пробовал это также, но это не работает ...

Я нашел другое решение.динамический а является объектом JS.Вы можете получить доступ к объектам js с помощью js.getProperty. Я создал класс для этого:

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);
}

Затем вы можете получить доступ с помощью

// a is your js object
var jsA = new JsObject(a);
jsA['YOUR_PROPERTY']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...