ใช่ วิธีสร้างลิงก์ประเภทปลอดภัยจากข้อมูล JSON ใน Javascript / Julius

ฉันมีเส้นทาง

/notes/#NoteId    NoteR    GET

จากหน้าอื่นฉันต้องการลิงค์ไป เมื่อใช้หมู่บ้าน "คลาสสิก" มันง่ายมาก:

<a href=@{NoteR $ entityKey note}>notetitle

ฉันต้องการให้เพจของฉันมีความไดนามิกมากขึ้นและรับข้อมูล JSON ซึ่งมีข้อมูลบันทึกย่อพร้อมรหัสบันทึกย่อ ฉันจะสร้าง และ typesafe-links ที่ถูกต้องได้อย่างไร

ฉันมีรหัสนี้ในไฟล์ .julius แล้ว แต่ไม่สามารถคอมไพล์ได้เนื่องจากคาดว่าจะมี "NoteId" ฉันควรแทรก obj.id ไว้ที่ไหนสักแห่งในการประมาณค่า URL @{..}... มีเบาะแสใดบ้างว่าต้องทำอย่างไร

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

แก้ไข:

ฉันมีสิ่งนี้ใน 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 ]

person davidbe    schedule 01.01.2013    source แหล่งที่มา
comment
ฉันไม่เก่งกับจาวาสคริปต์ แต่อย่างที่ฉันเห็น ค่า note ในตัวอย่างหมู่บ้านเล็กๆ เป็นค่า haskell ที่พิมพ์ไว้ แต่ obj ในโค้ดจูเลียสเป็นวัตถุจาวาสคริปต์ที่ไม่ได้พิมพ์ มันจะสมเหตุสมผลไหมที่บางสิ่งที่ไม่มีประเภทที่รู้จักจะเป็นส่วนหนึ่งของประเภท url ที่ปลอดภัย?   -  person Tarrasch    schedule 02.01.2013


คำตอบ (1)


ฉันอยากจะแนะนำให้เส้นทาง NotesR ส่งคืน URL ที่แสดงผลแบบเต็มแทนที่จะเป็นเพียง ID บันทึกย่อ

แก้ไข: ฉันได้เพิ่มรายการตำราอาหารเพื่อสาธิตวิธีการนี้: https://github.com/yesodweb/yesod/wiki/Using-type-safe-urls-from-inside-javascript

person Michael Snoyman    schedule 02.01.2013
comment
ฉันเข้าใจคำตอบของคุณ...แต่ยังไงล่ะ? ฉันมีอินสแตนซ์ของ ToJSON สำหรับ Entity Note (ดูการแก้ไขที่เป็นปัญหา) ใน Model.hs นี่คือสถานที่แนะนำใช่ไหม เมื่อเพิ่มบรรทัดสำหรับ url ด้วย NoteR nid ฉันได้รับข้อผิดพลาดว่าตัวสร้างข้อมูลไม่อยู่ในขอบเขต... เมื่อย้ายโค้ดนี้ไปยังไฟล์ตัวจัดการ จะทำให้เกิดข้อผิดพลาดอื่น มีอะไรแนะนำบ้าง? - person davidbe; 02.01.2013
comment
ฉันได้เพิ่มตัวอย่างตำราอาหารซึ่งหวังว่าจะสาธิตวิธีการนี้ โปรดแจ้งให้เราทราบหากคุณมีคำถามเพิ่มเติม: github .com/yesodweb/yesod/wiki/ - person Michael Snoyman; 03.01.2013
comment
ขอบคุณ นั่นทำให้สิ่งต่าง ๆ ชัดเจนขึ้น! ฉันกำลังดิ้นรนเพื่อให้ได้ URL ที่ถูกต้อง ฉันเริ่มต้นจากตัวอย่างนี้: yesodweb.com/blog/2012/ 04/yesod-js-todo (ไม่ได้สร้าง json ภายในตัวจัดการ) การสร้าง json จากตัวจัดการภายในจะเหมาะสมกว่าเมื่อต้องการ URL ที่เหมาะสม - person davidbe; 04.01.2013
comment
คุณยังคงสามารถใช้สไตล์นั้นได้ แต่ต้องอาศัยการทำงานเพิ่มขึ้นอีกเล็กน้อย แนวทางหนึ่งคือเก็บฟิลด์ Text ไว้ในประเภทข้อมูลของคุณสำหรับ URL แนวทางที่แปลกใหม่กว่านั้นคือต้องมีตัวแปรประเภทสำหรับ URL จากนั้น fmap พร้อมฟังก์ชันเรนเดอร์เพื่อเปลี่ยนจาก URL ที่ปลอดภัยสำหรับประเภทไปเป็น URL ที่เป็นข้อความ แต่ในกรณีนี้ มันอาจจะสมเหตุสมผลที่จะเก็บโค้ดไว้ในฟังก์ชันตัวจัดการ - person Michael Snoyman; 04.01.2013