2013-01-01 11 views
8

में JSON-डेटा से टाइप- सुरक्षित लिंक उत्पन्न मैं एक मार्गYesod, howto जावास्क्रिप्ट/जूलियस

/notes/#NoteId NoteR GET 

है एक और पृष्ठ से, मैं यह लिंक करना चाहते हैं। "क्लासिक" गांव का उपयोग करते समय, यह आसान है:

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

मैं अपने पृष्ठ और अधिक गतिशील हो और JSON-डेटा जो नोट जानकारी के साथ साथ होता है ध्यान दें-आईडी प्राप्त करना चाहते हैं। मैं सही और टाइपएफ़-लिंक कैसे उत्पन्न करूं?

मेरे पास पहले से ही यह कोड .julius फ़ाइल में है, लेकिन यह संकलित करने में विफल रहता है क्योंकि यह "नोटआईडी" की अपेक्षा करता है। मुझे यूआरएल इंटरपोलेशन में कहीं भी obj.id डालना चाहिए {..} ... कोई संकेत यह कैसे करना है?

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; 

संपादित करें:

मैं 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

मैं जावास्क्रिप्ट के साथ अच्छा नहीं हूँ, लेकिन जैसा कि मैंने इसे देख, गांव उदाहरण में 'note' मूल्य एक टाइप किए हुए है हैकेल मूल्य। लेकिन जूलियस कोड में 'obj' एक untyped जावास्क्रिप्ट ऑब्जेक्ट है। क्या किसी ज्ञात प्रकार के बिना किसी प्रकार के सुरक्षित यूआरएल का हिस्सा बनने के लिए यह समझ में आता है? – Tarrasch

उत्तर

6

मैं NotesR मार्ग पूरी तरह से गाया यूआरएल बजाय लौट सिर्फ टिप्पणी आईडी होने की सिफारिश करेंगे।

संपादित: मैं इस दृष्टिकोण का प्रदर्शन करने में एक रसोई की किताब प्रविष्टि जोड़ दिया है: https://github.com/yesodweb/yesod/wiki/Using-type-safe-urls-from-inside-javascript

+0

मैं आपका जवाब समझता हूं ... लेकिन कैसे? मेरे पास 'Model.hs' में एंटीटी नोट (प्रश्न में संपादन को देखें) के लिए ToJSON का उदाहरण था। क्या यह सलाह दी गई जगह है? यूआरएल के लिए 'नोटआर एनआईडी' के साथ एक लाइन जोड़ते समय, मुझे त्रुटि मिलती है कि डेटा कन्स्ट्रक्टर स्कोप में नहीं है ... इस कोड को हैंडलर-फ़ाइल में ले जाने पर, यह एक और त्रुटि देता है। क्या अनुशंसित है? – davidbe

+0

मैंने एक कुकबुक उदाहरण जोड़ा है जो मुझे आशा है कि दृष्टिकोण का प्रदर्शन होगा। यदि आपके पास और प्रश्न हैं तो मुझे बताएं: https://github.com/yesodweb/yesod/wiki/Using-type-safe-urls-from-inside-javascript –

+0

धन्यवाद। वह चीजों को मंजूरी दे दी! मैं उचित यूआरएल प्राप्त करने के साथ संघर्ष कर रहा था। मैं इस उदाहरण के रूप में शुरू कर रहा था: http://www.yesodweb.com/blog/2012/04/yesod-js-todo (हैंडलर के अंदर जेसन उत्पन्न नहीं)। अंदरूनी हैंडलर से जेसन उत्पन्न करना उचित यूआरएल की आवश्यकता होने पर अधिक समझ में आता है। – davidbe

संबंधित मुद्दे