2013-04-22 21 views
5

Według folderu na Package layout conventionsweb powinna zawierać następujące elementy:Jak zorganizować kod dart wewnątrz folderu internetowej

HTML, CSS, obrazy i, do cholery, chyba nawet trochę JavaScript. Wszystko to trafia do katalogu twojego paczki. Możesz dowolnie organizować zawartość tego artykułu. Szalej z podkatalogami, jeśli sprawia ci to radość.

Więc mój katalog web wygląda mniej więcej tak:

web/data_access 
web/model 
web/ui 
web/ui/navigation 
etc. 

Teraz, w jaki sposób udaje mi wszystkie te instrukcje importu. Mam wiele stwierdzeń jak:

import '../../model/my_model.dart'; 
import '../../data_access/mock_dao.dart'; 
etc. 

nie podoba mi się, że wiele z użyciem ../ w moich importu, ponieważ jest kruchy i mam problemy ilekroć coś zmienić w moim struktury folderów.

Czy istnieje lepszy sposób na uporządkowanie kodu wewnątrz folderu web?

lub

Czy istnieje inny sposób na przywóz?

Odpowiedz

3

Niestety, nie. Istnieje otwarty adres feature request, ale implementacja może chwilę potrwać. Najlepszym sposobem obejścia tego problemu jest powiązanie wielu klas w jeden plik lub wiele plików w bibliotekę - skutecznie zmniejszając liczbę instrukcji importowania. Posunąłem się nawet do tego, że cała moja aplikacja została napisana jedną wielką biblioteką z instrukcjami part of, więc nie musiałbym zajmować się poleceniami importu. Chociaż nie eliminuje to podstawowego problemu, działa na razie.

Ponadto, refaktoryzacja zamiast zmieniania nazwy po zmianie struktury folderów wpływa na zaimportowane instrukcje importu, eliminując ból ręcznego ich dostosowywania.

Komponenty WWW można zaimportować do biblioteki, aby ponownie je wyeksportować, używając instrukcji export, łącząc je w jeden import.

+0

To rozwiązanie jest ok, ale to nie działa ze składników sieci Web ** ** jak każdy składnik Web jest jego własna biblioteka (patrz [Komentarz przez Chris Bucket] (http : //stackoverflow.com/questions/15999088/dart-library-layout-with-web-component#comment22820794_15999088). –

+0

Mam nadzieję, że wspomniana prośba o funkcję nie potrwa zbyt długo, ponieważ mam wiele składników sieciowych. –

+0

To obejście ma również inne niedociągnięcia, takie jak spowolnienie edytora, gdy projekt powiększa się. Niestety, nie znam żadnych innych obejść. Imho, import jest obecnie trochę niezręczny. Mimo to, jeśli musisz użyć "../" w swoich instrukcjach, możesz zmienić strukturę folderów za pomocą refaktoryzacji - zmienia to instrukcje importu, aby odzwierciedlały nową strukturę. nadal nie jest elegancki, ale działa ... – MarioP

4

Umieściłem prawie cały kod mojej aplikacji w bibliotece, aby uniknąć problemów, które widzisz. Działa to nawet w przypadku komponentów internetowych.

zobaczyć to komponenty z widget.dart: https://github.com/kevmoo/widget.dart/tree/master/lib/components

zwykle tylko umieścić app.dart w internecie /, który po prostu pobiera w bibliotekach z lib i inicjuje aplikację.

Zobacz ten przykład aplikacji, która ciągnie się w opakowaniu pub, który ma składniki: https://github.com/sethladd/catpic-app

To właśnie mój plik HTML wygląda. Zauważ włączenia pakietów w ścieżce:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Your life is complete</title> 
    <link rel="components" href="packages/catpic/components/cat_pic.html"> 
    <link rel="components" href="packages/frame/components/frame.html"> 
    <link rel="stylesheet" href="styles.css"> 
</head> 
+0

Bardzo podoba mi się twoja struktura projektu. Spróbuję też, kiedy będę w domu. – MarioP

+0

Muszę pomyśleć przed wysłaniem - chciałem też zapytać: czy jest jakaś dokumentacja na ten temat? Nawet teraz, gdy wiem, czego szukam, nie mogę znaleźć niczego na dartlang.org - Zajęło mi trochę czasu, aby dowiedzieć się, dlaczego działał "package: widget/effects.dart" (Domyślam się, że nazwa aplikacji jest "widget"?) – MarioP

+0

Mam niektóre z moich składników sieciowych w lib i zaimportuj je zgodnie z opisem. Jednak debugowanie jest bardzo kłopotliwe: w przypadku błędu debugger przeskakuje do pliku w "web/out/packages" i zdarza się, że edytuję niewłaściwy plik. Następnie, jeśli chcę ustawić punkt przerwania, trudno jest znaleźć odpowiednie miejsce, aby je ustawić. –