Внутренняя ошибка:... неоднозначная ссылка: DataGrid определен в библиотеке web/DataGrid.dart, а также в web/out/DataGrid.dart.

Я создал чистую сетку данных, используя веб-интерфейс для тестирования, и он работал нормально. Тогда я решил попытаться объявить это как компонент. Я изменил ссылки на библиотеки, и теперь при попытке запустить приложение выдает ошибку, описанную выше. Вы можете увидеть мою структуру файлов ниже. Причина, по которой я получаю сообщение "неоднозначная ссылка" при попытке его запуска, заключается в том, что когда я вошел в автоматически сгенерированный файл DataGrid.dart в каталоге out, он имел следующее объявление

import 'DataGrid.dart';
...
import '../DataGrid.dart';

Я не понимаю, почему сгенерированный код импортирует их оба. Одна вещь, которую я рассмотрел, заключается в том, что это может быть связано с тем, что файл DataGridPage.html создает экземпляр моего компонента DataGrid, а мой файл DataGridPage.dart импортирует DataGrid.dart, так что он может иметь ссылки на DataGridColumn (для этого необходимо установить столбцы для DataGrid). В DataGridPage.dart я также присоединяю к определенным событиям DataGrid, таким как SortColumnChanged и SelectionChanged, поэтому мне нужно запросить копию моего экземпляра DataGrid в DataGridPage.dart (я не думаю, что есть способ присоединиться к событиям из веб-компонента создание экземпляров в DataGridPage.html).

Есть идеи о том, что я делаю не так?

Вот моя файловая структура:

DataGrid.dart
--------------------------------------------
library datagrid;
...
part 'DataGridColumn.dart';
part 'DataGridRow.dart';
class DataGrid extends WebComponent{...}    

DataGridRow.dart
--------------------------------------------
part of datagrid;
class DataGridRow {...}

DataGridColumn.dart
--------------------------------------------
part of datagrid;
class DataGridColumn {...}

DataGrid.html
--------------------------------------------
[contains the component declaration UI]

DataGridPage.html
-----------------------------------------
...
<div is="s-datagrid" id="myDataGrid" ItemsSource="{{app.Assets}}" Columns="{{app.Columns}}"></div>
...

DataGridPage.dart
--------------------------------------------
import 'DataGrid.dart';
import 'Asset.dart';
void main() {
}
DataGridApp _app;
DataGridApp get app {
  if (_app == null) {
    _app = new DataGridApp();
  }
  return _app;
}
class DataGridApp{
//provides ItemsSource and DataGridColumn data
}

1 ответ

jmesserly ответил на это на сайте github. Он сказал, что вам нужно удалить компонент импорта в вашем основном файле дротика. Поэтому в моем примере я бы удалил оператор импорта DataGrid.dart из DataGridPage.dart. Среда IDE выдаст вам предупреждение, но вы можете проигнорировать его, потому что он будет фактически запущен из папки out.

GitHub Web-UI, выпуск 342

Другие вопросы по тегам