2013-06-11 15 views
5

Nie wydaje mi się, żebym był w stanie uchwycić kompilowaną koncepcję. W Internecie nie ma żadnych przykładów. Jak chciałbym zmienić proste fragmenty kodu zinterpretowane na skompilowane.Przechodzę od interpretacji do skompilowanej listy kontrolnej

Na przykład:

listUsersH :: AppHandler() 
listUsersH = do 
    users <- liftIO $ getColList "users" 
    let userListS = mapSplices userLinkS users 
    heistLocal (bindSplice "users" userListS) $ render "list-users" 
    where 
    userLinkS d = runChildrenWithText [("user",T.pack $ at "uname" d)] 

Jak zrobić prostą kombinację "runChildren", "mapSplices", "bindSplice" i "render" ze sporządzoną Heist?

Rozumiem, że koncepcja jest inna i nie ma "heistLocal" .. Ale muszę teraz wrócić i ponownie nauczyć się podstawowych rzeczy, takich jak wyświetlanie wielu rekordów w pętli "dla każdego" sposób. Czy ktoś może to wyjaśnić i pokazać prosty przykład podobny do powyższego, ale z kompilacją?

W tej chwili nie wiem nawet, jak wykonać proste podstawianie zmiennych za pomocą skompilowanego podnośnika. Na przykład w ten sposób:

simpleString = "Insert me..." 
insertString = heistLocal (bindSplices spl) $ render "tst" 
where 
    spl = [("var", textSplice simpleString)] 

Proszę mi ktoś pomóc z podstawami lub wskaż mnie do miejsca, z pewnymi minimalnymi przykładów. Czytałem dokumentację z przyciąganiem do strony internetowej.

Odpowiedz

1

Skomplikowane połączenia są zdecydowanie trudniejsze w użyciu. Po pierwsze, wszystkie spawy muszą być powiązane statycznie z góry. Wymaga to dość znaczącej zmiany w sposobie myślenia. Wcześniej, używając heistLocal, można było postrzegać sploty jako obiekty o ograniczonym zakresie, które można wiązać w razie potrzeby. Można podejmować decyzje w procedurach obsługi, wykorzystując informacje zawarte w żądaniu, a następnie odpowiednio wiązać spawy. Nadal możesz robić podobne rzeczy za pomocą skompilowanych połączeń, ale wymaga to odwrócenia kontroli. Teraz musisz wykonać tego rodzaju dynamiczne, oparte na żądaniach, podejmowanie decyzji w splice (która jest monadowym transformatorem wokół twojej monadki handlerki, więc nadal masz dostęp do funkcji obsługi).

Polecam myślenie o kompilowanych spawach jako o zasobach globalnych, które udostępniasz projektantom stron internetowych, z których mogą korzystać na dowolnej stronie, jeśli uznają to za stosowne. Oglądanie splotów w ten sposób ma kilka zalet. Po pierwsze, czyni je bardziej ortogonalnymi i kompozycyjnymi niż ze specjalistycznymi połączeniami związanymi z heistLocal. Po drugie, ułatwia debugowanie, ponieważ nigdy nie musisz się martwić, czy splot jest związany, czy nie.

Jednak największą trudność zestawionych spawów wynika z podziału czasu ładowania i czasu uruchamiania oraz od tego, co to oznacza dla funkcji łączenia. Mówimy o tym trochę w ostatniej sekcji naszej strony wiki o migrating to Heist 0.10. Za tym również mamy a longer discussion of the "why".

Nadal pracujemy nad udoskonaleniem interfejsu API dla skompilowanego oprogramowania Heist. Jesteśmy bliscy ukończenia Heist 0.13, co znacznie upraszcza interfejs API i powinno ułatwić jego zrozumienie. Kod znajdujący się w oddziale new-api na githubie jest już prawie gotowy do wydania.

+0

OK. Czy na razie sugerowałbyś pozostanie przy interpretowanym wariancie? Cóż, przynajmniej dopóki nie uporządkujesz interfejsów API i nie ustabilizujesz ich. Nadal nie mogę zrozumieć mojej koncepcji, szczerze mówiąc ... Jeszcze się nie klika. Tak więc chciałbym związać i przetworzyć wszystkie sploty na samym początku w funkcji makeSnaplet, prawda? –

+0

Nie musisz robić tego wszystkiego naraz, ale musisz użyć funkcji addConfig, aby dodać wszystkie skompilowane sploty. To, czy zmienisz, zależy od tego, jak bardzo chcesz być krwawiącą. Nie przewiduję, że oddział new-api zmieni się znacznie bardziej. Jedyne co pozostało na mojej liście zadań to dodanie jednej lub dwóch dodatkowych funkcji. Wszystko, co tam jest, powinno być całkiem stabilne. Nie udzielę konkretnej odpowiedzi na to pytanie, dopóki nie wydam 0.13, ale jeśli trafisz na IRC, mogę wskazać ci właściwy kierunek. – mightybyte

+0

Dziękuję, mightybyte, będę czekać na niektóre z twoich przykładów po wydaniu 0.13. Przynajmniej najczęstsze wzory. Byłoby to bardzo przydatne, ponieważ nie ma nic w sieci. Na razie pozostanę z interpretowanym wariantem. –

Powiązane problemy