Polymer.dart: использование сильных типов для дочерних компонентов вызывает исключение, var работает

У меня есть два пользовательских компонента, написанных в Polymer.dart, один из которых является родителем другого. Я хочу получить ссылку на дочерний компонент в родительском, но если я использую аннотации типа, я получаю исключение. С другой стороны, если я использую ключевое слово var для объявления переменной, все работает нормально.

Сообщение об ошибке и трассировка стека, которые я получаю при использовании типов:

Неперехваченная ошибка: тип «ChildComponent» не является подтипом типа «ChildComponent» «childComponent».

Трассировки стека:

#0 ParentComponent.inserted (package:types_test_lib/parent_component.dart?1375856554489:9:67)

# 1 _registerLifecycleInsert. (пакет: custom_element/custom_element.dart:643:21)

#2 _ZoneBase._runInZone (dart:async/zone.dart:82:17)

#3 _ZoneBase._runGuarded (dart:async/zone.dart:99:22)

#4 _ZoneBase.executeCallbackGuarded (dart:async/zone.dart:62:21)

#5 _RunAsyncZone.runAsync.. (dart:async/zone.dart:205:61)

# 6 PerformMicrotaskCheckpoint (package:observe/src/microtask.dart:36:17)

#7 wrapMicrotask.. (package:observe/src/microtask.dart:58:35)

#8 runZonedExperimental (dart:async/zone.dart:259:53)

№ 9. RunZonedExperimental. (дротик: асинхронный/зона. дротик: 256:34)

#10 _ZoneBase._runInZone (dart:async/zone.dart:82:17)

#11 _ZoneBase._runUnguarded (dart:async/zone.dart:102:22)

# 12 runZonedExperimental (dart:async/zone.dart:255:30)

#13 обернуть микрозадачу. (пакет: наблюдать/src/microtask.dart:54:25)

#14 initPolymer (package:polymer/polymer.dart:72:5)

#15 основной (.../D:/workspace/dart/types_test/web/types_test.html:7:22)

Исключение: тип «ChildComponent» не является подтипом типа «ChildComponent» для «childComponent».

индекс.html:

<!DOCTYPE html>
<html>
  <head>
    <link rel="import" href="parent_component.html"/>
    <link rel="import" href="child_component.html"/>
    <script src="packages/polymer/boot.js"></script>
  </head>
  <body>
    <parent-component>
      <child-component/>
    </parent-component>

    <script type="application/dart">
      void main() {}
    </script>
  </body>
</html>

parent_component.html:

<!DOCTYPE html>
<html>
  <body>
    <polymer-element name="parent-component" extends="div">
      <template></template>
      <script type="application/dart" src="parent_component.dart"></script>
    </polymer-element>
  </body>
</html>

parent_component.dart:

import "package:polymer/polymer.dart";
import "child_component.dart";

@CustomTag("parent-component")
class ParentComponent extends PolymerElement with ObservableMixin {
  void inserted() {
    var childComponent = host.query("child-component").xtag;
    // !!! ChildComponent childComponent = host.query("child-component").xtag;
  }
}

дочерний_компонент.html:

<!DOCTYPE html>
<html>
  <body>
    <polymer-element name="child-component" extends="div">
      <template></template>
      <script type="application/dart" src="child_component.dart"></script>
    </polymer-element>
  </body>
</html>

child_component.dart:

import "package:polymer/polymer.dart";

@CustomTag("child-component")
class ChildComponent extends PolymerElement with ObservableMixin {
  
}

Я делаю что-то неправильно? В чем может быть проблема?

Спасибо за любой ответ!

Габор


person Gabor Szabo    schedule 06.08.2013    source источник
comment
быстрое предположение: что произойдет, если вы импортируете child_component.dart как пакет: импорт, а не относительный импорт?   -  person Justin Fagnani    schedule 07.08.2013
comment
То же самое происходит. Сегодня я обновил свой Dart Editor, который дает мне полную трассировку стека. Я обновил вопрос с ним. Это возможная ошибка?   -  person Gabor Szabo    schedule 07.08.2013


Ответы (1)


У меня была аналогичная проблема с ошибкой, появляющейся в следующем коде:

DivElement templ = query("#myElem");
var ct = templ.xtag;
//CustomTable ct = templ.xtag;
ct.people = [new Person('aaa', 'aaa'), new Person('vvv', 'vvv')];

где CustomTable расширяет PolymerElement

К счастью, похоже, это исправлено в последних версиях SDK и Polymer (я пробовал SDK 0.6.21.3_r26639 и полимер 0.6.21+3). Я проверил ваш пример, и он тоже работает.

person Lesiak    schedule 27.08.2013