2013-12-21 3 views
2

Я создал свою библиотеку так:Как использовать пользовательские библиотеки 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; 
    ^

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

ответ

1

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

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

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

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

<!-- should be name="set-view" --> 
<polymer-element name="set-vew" attributes="count"> 
+0

Похоже, я должен держать мой полимер «мнения» отдельно от моего основного кода, потому что я делю тонна классов и не может дублировать импорт в каждом отдельном классе, это просто громоздко. Ник Флорос в Google+ предложил проверить здесь примеры https://github.com/sethladd/dart-polymer-dart-examples, в которых много полимерных небольших приложений, использующих библиотеки. Попытка ... – JesterXL

+0

вы можете создать файл библиотеки, который экспортирует несколько других библиотек, например, я сделал это здесь [polymer_elements.dart] (https://github.com/ErikGrimes/polymer_elements/blob/master/lib/polymer_elements.dart) и импортируйте эту библиотеку, а не каждый, указанный внутри этого файла. –

+0

Если я изменил верхнюю строку в SetView.html: часть workoutloggerlib; до: импортная упаковка: полимер/полимер.dart '; импорт '../workoutloggerlib.dart'; Затем он работает. Заметьте, что мне нужно импортировать файл polymer.dart, даже если он включен в мою библиотеку. Я также должен был удалить все мои классы, связанные с полимером и html, из библиотеки. Не уверен, почему мне нужно снова импортировать полимерный класс, но, по крайней мере, у всех моих файлов для полимеров Polymer теперь всего 2 импорта, и это нормально. – JesterXL

Смежные вопросы