2013-01-01 6 views
8

mam trasyJesod, howto generować typu bezpieczny link z danymi JSON w JavaScript/Julius

/notes/#NoteId NoteR GET 

Z innej strony, chcę do niej link. Przy zastosowaniu "Classic" Hamlet, to proste:

<a [email protected]{NoteR $ entityKey note}>notetitle 

Chcę moja strona będzie bardziej dynamiczny i uzyskać JSON-danych, która zawiera informacje oraz note-note-id. Jak wygenerować poprawne linki do bezpiecznych typów i?

Mam już ten kod w pliku .julius, ale nie można go skompilować, ponieważ oczekuje "NoteId". Powinienem wstawić obj.id gdzieś w interpolacji URL @ {..} ... Jakieś wskazówki, jak to zrobić?

function loadnotes() { 
var list = $("#results"); 
jQuery.getJSON("@{NotesR}", 
    function(o){ 
     $.each(o, function (i, obj) { 
      $('<a [email protected]{NoteR}/>' + obj.title + '</a>').appendTo(list); 
     })}); 
} 
window.onload = loadnotes; 

EDIT:

mam to w Model.hs:

instance ToJSON (Entity Note) where 
    toJSON (Entity nid (Note title content created_at updated_at userId)) = object 
     [ "id" .= nid 
     , "title" .= title 
     , "content" .= (unTextarea content) 
     , "created_at" .= created_at 
     , "updated_at" .= updated_at 
     , "userId" .= userId ] 
+0

nie jestem dobry z javascript, ale jak ja to widzę, 'note' wartość w przysiółku przykład jest wpisany wartość haskell. Ale "obj" w kodzie juliusa jest nietkniętym obiektem javascript. Czy ma sens, aby coś bez znanego typu było częścią bezpiecznego URL-a typu? – Tarrasch

Odpowiedz

6

Polecam konieczności trasa NotesR powrócić w pełni renderowany URL zamiast tylko uwaga ID.

Edit: Dodałem wpis cookbook wykazania tego podejścia: https://github.com/yesodweb/yesod/wiki/Using-type-safe-urls-from-inside-javascript

+0

Rozumiem twoją odpowiedź ... ale jak? Miałem wystąpienie ToJSON dla Entity Note (spójrz na daną edycję) w 'Model.hs'. Czy to jest zalecane miejsce? Podczas dodawania wiersza adresu URL, z 'NoteR nid', pojawia się błąd, że konstruktor danych nie znajduje się w zasięgu ... Przesuwając ten kod do pliku obsługi, daje on kolejny błąd. Co jest zalecane? – davidbe

+0

Dodałem przykład książki kucharskiej, który mam nadzieję pokazuje podejście. Daj mi znać, jeśli masz więcej pytań: https://github.com/yesodweb/yesod/wiki/Using-type-safe-urls-from-inside-javascript –

+0

Dziękuję. To oczyściło sprawę! Miałem problemy z uzyskaniem prawidłowego adresu URL. Zacząłem od tego przykładu: http://www.yesodweb.com/blog/2012/04/yesod-js-todo (nie generuję json wewnątrz handler'a). Generowanie jsona z wewnętrznego programu obsługi ma więcej sensu, kiedy potrzebny jest odpowiedni adres URL. – davidbe