Абсолютные пути не допускаются в Dart WebComponent

Мой маленький образец Dart/Polymer до сих пор работает хорошо. (GitHub)

Вот файл yaml, который я использую:

name: PolymerHelloWorld
environment:
  sdk: any
dependencies:
  browser: any
  polymer: any
  shadow_dom: any
  mdv: any

transformers:
-  polymer:
    entry_points:
    - web/index.html
    - web/hello-world/hello-world.html
    - web/stopwatch/stopwatch.html

"Сборка паба" производит: (Снова жить под GH) введите здесь описание изображения

Насколько я понимаю, сейчас у меня есть 2 веб-компонента: hello-world и секундомер.

Я сделал второй проект, полностью независимый от PolymerHelloWorld. Вот index.html: введите здесь описание изображения

Я получаю это сообщение об ошибке


pub build
Building PolymerSecondWorld...
[Error from polymer (Linter) on PolymerSecondWorld|web/index.html]:
web/index.html:4:5: absolute paths not allowed: "https://rawgithub.com/MikeMitterer/DART-Sample-PolymerHelloWorld/master/build/hello-world/hello-world.html"

Разве это не идея веб-компонентов? Я что-то упустил?

[Обновление]
Я добавил DART-Sample-PolymerElementConsumer в мой GH-Repo. Он включает весь полимерный материал... Этот образец не является образцом дротика. Он использует полимер для импорта компонента. По крайней мере - пытается...

Вот код HTML, который он пытается запустить:
https://rawgithub.com/MikeMitterer/DART-Sample-PolymerElementConsumer/master/web/index.html

Просмотр кода:
https://raw.github.com/MikeMitterer/DART-Sample-PolymerElementConsumer/master/web/index.html

HTML-страница не показывает сообщения об ошибке - ничего. Только заголовок, но ничего из веб-компонента.


person Mike Mitterer    schedule 23.01.2014    source источник


Ответы (1)


Если вы хотите импортировать элементы Polymer, они должны быть в пакете Dart (например, pub.dartlang.org).
Вы добавляете пакет к себе pubspec.yaml, чтобы импортировать пакет в свой проект, и
затем вы можете импортировать элементы/компоненты из каталога пакетов.

Polymer также очень деликатно относится к путям импорта в проекте Dart
, и то, что вы пробовали окончательно, не будет работать
(хотя это может работать в JavaScript), но для этого потребуется выполнить код (включенный в загруженный компонент ), загруженный во время выполнения, который Dart еще не поддерживает. Весь код должен быть доступен во время компиляции.

Некоторые обсуждения на эту тему:

ИЗМЕНИТЬ

Я посмотрел на ваш код и попытался понять ваш комментарий и соответственно расширил свой ответ.

Чтобы иметь возможность импортировать компоненты из пакета, компоненты должны находиться в каталоге lib пакета, который вы хотите импортировать. Веб-страница, использующая (импортирующие) элементы, должна быть проектом (пакетом) Dart, который импортирует пакет компонента в «pubspec.yaml». Для веб-приложения (index.html, ...) web — правильный каталог в пакете.

person Günter Zöchbauer    schedule 23.01.2014
comment
Именно по этой причине я попытался импортировать скомпилированный файл hello-world. Веб-компонент должен быть независимым от языка и набора инструментов (фреймворка). - person Mike Mitterer; 23.01.2014
comment
Хорошо, но вы можете импортировать только из каталога пакетов, например «packages/somecomponentpackage/theelement.html». Я также не вижу, где у вас есть DART-SamplePolymerHelloWorld в вашем pubspec.yaml. - person Günter Zöchbauer; 23.01.2014
comment
@MikeMitterer Я расширил свой ответ. - person Günter Zöchbauer; 23.01.2014
comment
Я обновил свой вопрос. Я перемещаю всю потребительскую выборку в GH... Как объяснено в моем обновленном вопросе: потребитель не имеет ничего общего с дротиком. - person Mike Mitterer; 23.01.2014
comment
Это не сработает. Потребителем должно быть веб-приложение Dart. Вы должны создать пользовательское приложение в Dart и собрать его с помощью dart2js/pub build (transpile), чтобы сделать его приложением JavaScript, которое работает в браузерах, отличных от Dartium. Пакет, содержащий компоненты, содержит необработанные компоненты Dart, которые необходимо транспилировать вместе с потребляющим приложением. - person Günter Zöchbauer; 23.01.2014
comment
Ведь вся философия веб-компонентов и полимеров заключается в том, чтобы быть независимыми от языка и инструментов. - person Mike Mitterer; 23.01.2014
comment
Dart еще недостаточно динамичен, чтобы работать таким образом. Вы не можете скомпилировать во время выполнения. Вам нужно будет реализовать транспилятор Dart2Js в JavaScript и отправить его с вашим приложением, чтобы веб-страница могла транспилировать произвольный код Dart в JavaScript по мере его загрузки. - person Günter Zöchbauer; 23.01.2014
comment
Хм, немного расстраивает. Надеюсь, это изменится как можно скорее. Для меня это больше проблема дизайна, чем техническая проблема. В любом случае - спасибо! для вашей помощи. - person Mike Mitterer; 23.01.2014
comment
Это только техническая проблема, помимо решения Дизайнера создать язык, который не является JavaScript, но приложения, созданные с его помощью, должны работать в браузерах, поддерживающих только JavaScript. Это не произойдет очень скоро AFAIK. - person Günter Zöchbauer; 23.01.2014
comment
Для динамических функций вы должны использовать сам JavaScript через Dart-JS-interop. Я не знаком с PolymerJS и не знаю, насколько хорошо он работает на одной странице с PolymerDart и поддерживает ли PolymerJS динамическую загрузку компонентов. Но AFAIK это в настоящее время единственный вариант. - person Günter Zöchbauer; 23.01.2014