Как использовать пользовательские библиотеки Dart в Polymer?

Я создал свою библиотеку так:

// web/com/jessewarden/workoutlogger/workoutloggerlib.dart
library workoutloggerlib;

import 'dart:async';
import 'dart:html';
import 'package:polymer/polymer.dart';

part "types/WorkoutTypes.dart";

part "vo/Exercise.dart";
part "vo/Set.dart";
part "vo/Workout.dart";

part "views/SetView.dart";
part "views/SetView.html";

Мой SetView.dart:

part of workoutloggerlib;

@CustomTag('set-view')
class SetView extends PolymerElement
{

    @published
    Set set;

    SetView.created() : super.created();
}

И связанный с ним HTML:

<polymer-element name="set-vew" attributes="count">
  <template>
    <div>
        <h3>{{set.name}}</h3>
        <span class="label label-primary">Goal</span>
        <div class="input-group">
            <span class="input-group-addon">Reps</span>
            <input type="text" class="form-control disabled" value={{set.goalReps}}>
        </div>
        <div class="input-group">
            <span class="input-group-addon">Weight</span>
            <input type="text" class="form-control" value="{{set.goalWeight}}">
            <span class="input-group-addon">lbs</span>
        </div>
    </div>
  </template>
  <script type="application/dart" src="SetView.dart"></script>
</polymer-element>

Однако, пока она компилируется, при запуске я получаю:

'http://somelocalserver/WorkoutLogger/web/com/jessewarden/workoutlogger/views/SetView.dart': error: line 1 pos 6: url expected
part of workoutloggerlib;
     ^: http://somelocalserver/WorkoutLogger/web/com/jessewarden/workoutlogger/views/SetView.dart
Internal error: 'http://somelocalserver/WorkoutLogger/web/com/jessewarden/workoutlogger/views/SetView.dart': error: line 1 pos 6: url expected
part of workoutloggerlib;
     ^
Internal error: 'http://somelocalserver/WorkoutLogger/web/com/jessewarden/workoutlogger/views/SetView.dart': error: line 1 pos 6: url expected
part of workoutloggerlib;
     ^

Если я вручную импортирую классы для каждого файла, отказываясь от своей библиотеки, все работает нормально. Очевидно, что это нежелательно, поскольку таким образом код становится неуправляемым, имеет более тесные зависимости и его труднее рефакторировать.


person JesterXL    schedule 21.12.2013    source источник


Ответы (1)


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

Стоит отметить, что мы должны использовать отдельный пакет, на который мы ссылаемся на страницы примеров.

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

У вас опечатка - может быть просто в коде, который вы вставили - но тем не менее

<!-- should be name="set-view" -->
<polymer-element name="set-vew" attributes="count">
person Günter Zöchbauer    schedule 21.12.2013
comment
Похоже, мне придется отделить представления полимеров от основного кода, потому что я разделяю кучу классов и не могу дублировать импорт в каждом отдельном классе, это просто громоздко. Ник Флорос из Google+ предложил посмотреть примеры здесь github.com/sethladd/dart- полимерные дартс-примеры, которые имеют множество небольших приложений полимеров с использованием библиотек. Пытающийся... - person JesterXL; 22.12.2013
comment
вы можете создать файл библиотеки, который экспортирует несколько других библиотек, как я сделал это здесь полимер_элементов.dart и импортировать эту библиотеку вместо каждой из перечисленных в этом файле. - person Günter Zöchbauer; 22.12.2013
comment
Если я изменю верхнюю строку в SetView.html: часть trainingloggerlib; to: import 'package:polymer/polymer.dart'; импортировать '../workoutloggerlib.dart'; Тогда это работает. Обратите внимание, что мне по-прежнему приходится импортировать файл полимера.дарт, несмотря на то, что он включен в мою библиотеку. Мне также пришлось удалить из библиотеки все мои классы, связанные с Polymer dart и html. Не уверен, почему мне нужно снова импортировать класс полимера, но, по крайней мере, все мои файлы дротиков Polymer теперь имеют только 2 импорта, и это нормально. - person JesterXL; 22.12.2013