html dart dart-polymer

Importación HTML: CustomTag no registrado



dart dart-polymer (1)

my_app.dart importar todas sus clases de Dart componentes personalizados en su my_app.dart . Por lo general, crearía un solo archivo Dart para importar, que exportaría cada entrada para que su my_app.dart permanezca limpio.

Estoy intentando crear un elemento personalizado a partir de un elemento de polymer-element , pero no puedo hacer que @CustomTag el @CustomTag . Mi archivo de dart ( my_element.dart ) se ve así:

@HtmlImport(''my_element.html'') library projects.projectFolder.layout; import ''package:polymer/polymer.dart''; import ''dart:html''; @CustomTag(''my-element'') class MyElement extends PolymerElement { @published String caption; MyElement.created() : super.created(); }

Mi archivo html ( my_element.html ) tiene este aspecto:

<link rel="import" href="../../../../packages/polymer/polymer.html"> <polymer-element name="my-element"> <template> <link rel="stylesheet" href="my_element.css"> <core-toolbar> <h1>{{ caption }}</h1> </core-toolbar> </template> <script type="application/dart" src="../my_element.dart"></script> </polymer-element>

Lo que pasa es que la consola de Chrome sigue imprimiendo el siguiente error:

No elements registered in a while, but still waiting on 1 elements to be registered. Check that you have a class with an @CustomTag annotation for each of the following tags: ''my-element''.

Es curioso, porque he declarado la etiqueta personalizada como debería ser. Parece que no ha leído el archivo .dart cuando alcanza el .html .
El archivo .html se llama desde otro archivo .html principal. Creo que el orden en el que se llaman los archivos podría ser el problema, pero nuevamente, si Dart se compila antes de ejecutarse, no debería importarle.
He intentado varias soluciones pero ninguna de ellas ha funcionado. El único que funcionó es bastante sucio, que es importar el archivo my_element.dart directamente desde el archivo principal my_app.dart . Supongo que no debería hacerse de esa manera porque eso significaría importar todos los archivos my_element.dart en el mismo my_app.dart principal.

EDITAR (agregar index.html , pubspec.yml )
Mi archivo index.html parece a lo siguiente:

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> <title>My app</title> </head> <body unresolved fullbleed> <my-app></my-app> <script type="application/dart"> import ''package:polymer/polymer.dart''; import ''package:project/my_app.dart''; main() => initPolymer(); </script> </body> </html>

my_app es otro elemento personalizado, que es el elemento principal donde van todos los demás. En otras palabras, es como el controlador principal de la aplicación. Este elemento también tiene un archivo .dart y .html , que llamará a otros elementos como my-element .
Como puede ver, mi función main() es muy simple, ya que solo inicia el polímero (ver index.html ).

Mi pubspec.yml parece a lo siguiente:

name: project version: 0.0.1 description: Some project. author: Tomas homepage: https://github.com/******* environment: sdk: ''>=1.10.0 <2.0.0'' dependencies: polymer: ''^0.16.0'' core_elements: ''^0.7.1'' paper_elements: ''^0.7.1'' route_hierarchical: "^0.6.1" transformers: - polymer: entry_points: web/index.html - $dart2js: $include: "**/*.polymer.bootstrap.dart"

Mi directorio se parece a esto (solo muestro una fracción de él, el importante que espero):

. ├── README.md ├── build │   └── web │   ├── index.html │   ├── index.html.polymer.bootstrap.dart.js │   └── packages ├── lib │   ├── my_app.dart │   └── src │   ├── elements │   ├── layout │   │   ├── my_element.css │   │   ├── my_element.dart │   │   └── my_element.html │   ├── my_app.css │   ├── my_app.html │   └── modules │   └── module.dart │   ├── my_app.css ├── pubspec.lock ├── pubspec.yaml └── web │ ├── index.html │ └── packages -> ../packages │   ├── my_app.html │   └── modules │   └── module.dart

Espero que esta edición no confunda más de lo que debería. Solo busco saber cuál es la estructura de carpetas correcta y la forma de importación de una aplicación de Dart.

En pocas palabras: ¿cómo debería ser el árbol cuando se programa una gran aplicación en un dardo, y dónde debo hacer las importaciones? He visto todos los documentos que pude, incluidos algunos tutoriales, pero todos hablan de ejemplos muy simples en los que la mayor parte del código está en la carpeta web , que no me gustaría.

EDITAR (resumir y reformular, agregar my_app.html y my_app.dart )

En pocas palabras:

Tengo un elemento personalizado definido por my_element.html y my_element.dart (definido anteriormente en esta respuesta) y quiero importarlo a otro elemento my_app usando solo el html. Es decir, no importando my_element.dart en my_app.dart , sino importando solo my_element.html utilizando una etiqueta de enlace en my_app.html :

<link rel="import" href="../../../packages/polymer/polymer.html"> <link rel="import" href="layout/my_element.html"> <polymer-element name="my-app"> <template> <core-scaffold id="scaffold"> <my-element tool flex></my-element> <main fit></main> </core-scaffold> </template> <script type="application/dart" src="../my_app.dart"></script> </polymer-element>

my_app.dart :

@HtmlImport(''src/my_app.html'') import ''package:polymer/polymer.dart''; import ''package:core_elements/core_scaffold.dart''; @CustomTag(''my-app'') class MyApp extends PolymerElement { MyApp.created() : super.created(); }

¿No debería el <script type="application/dart" src="../my_element.dart"></script> ser suficiente para decirle al compilador que cargue ese archivo de dart para registrar la etiqueta del elemento siguiendo la dependencia transitiva definida? por la importación de html?