2013-04-09 5 views
5

मैं बस किसी भी तरह चाहते हैं कहते हैं "मैं इस परियोजना में उपयोग में सभी तरीकों चाहते [जावास्क्रिप्ट]" मैन्युअल एनोटेशन हर विधि कष्टप्रदडिफ़ॉल्ट रूप से जावास्क्रिप्ट विशेषता का उपयोग करने का कोई तरीका है?

+0

नहीं है, लेकिन यह भी इसे उस तरह से नहीं होना चाहिए - सर्वर साइड तरीकों '[] के साथ एनोटेट नहीं किया जाना चाहिए' (क्योंकि वे जो क्लाइंट-साइड पर उपलब्ध नहीं है कार्यक्षमता का उपयोग)। –

+0

मुझे कोड भी मिला है [] वास्तव में कष्टप्रद। यह कारणों में से एक है कि मैंने इसके बजाय टाइपस्क्रिप्ट का उपयोग करने का फैसला क्यों किया। संपूर्ण मॉड्यूल या कक्षा को जावास्क्रिप्ट के रूप में चिह्नित करने का एक संभावित समाधान हो सकता है। या यह संभव नहीं है? –

+0

यह संभव है, उदाहरण के लिए मेरा जवाब देखें। – Taha

उत्तर

6

एफ # 3 आप ReflectedDefinition विशेषता (उर्फ [जावास्क्रिप्ट] WebSharper में के साथ एक मॉड्यूल को चिह्नित करने देता है) जो नीचे के सभी तरीकों को चिह्नित करता है।

More About F# 3.0 Language Features देखें:

(असामान्य विशेषताओं का भाषण, एफ # 3.0 में, [< ReflectedDefinition>] विशेषता अब इसे लागू करने के लिए एक आशुलिपि तरीके के रूप में, मॉड्यूल और प्रकार परिभाषा पर रखा जा सकता है । मॉड्यूल/प्रकार के प्रत्येक व्यक्ति सदस्य)

+1

उदाहरण के लिए, आप मेरे हालिया फ़नस्क्रिप्ट नमूने देख सकते हैं (मुझे लगता है कि एक ही कोड संरचना वेबशेपर में भी काम करेगी): https://github.com/tpetricek/Documents/blob/master/Talks%202013/Love%20The % 20 डेटा% 20 (चैनल 9) /code/WorldBank.Web/Page.fs –

3

मुझे लगता है कि फिल के जवाब जाने का रास्ता है - जब आप एक पूरे मॉड्यूल या प्रकार चिह्नित कर सकते हैं, यह बहुत अधिक शोर नहीं जोड़ता है और यह भी करने की अनुमति देता अंतर करना WebSharper में सर्वर-साइड और क्लाइंट-साइड कोड के बीच।

बस रिकॉर्ड के लिए, एफ # कंपाइलर ओपन-सोर्स है और इसलिए कोई व्यक्ति (जो इस मुद्दे को महत्वपूर्ण पाता है) आसानी से शाखा बना सकता है जो सेटिंग को ओवरराइड करने के लिए अतिरिक्त कमांड लाइन विशेषता जोड़ देगा। मुझे लगता है कि यह केवल पैरामीटर जोड़ने और फ्लैग का डिफ़ॉल्ट मान check.fs (यहां is the source on GitHub) में सेट करने का मामला है।

फिलहाल, मुख्य एफ # भंडार योगदान कि नई सुविधाएँ जोड़ने स्वीकार नहीं करता है (discussion here देखें), लेकिन यह निश्चित :-)

2

तो एफ # टीम के लिए एक सुविधा का अनुरोध भेजने के लिए एक अच्छा तरीका है आप जावास्क्रिप्ट विशेषता के साथ अपने सभी कोड को एनोटेट करते हैं, वेबशर्पर कंपाइलर जावास्क्रिप्ट में सबकुछ अनुवाद करने का प्रयास करेगा। वेबशर्पर विकास में अंगूठे का एक नियम सर्वर-साइड और क्लाइंट-साइड कोड को अलग करना है, ताकि आप प्रत्येक कार्य/सदस्य के बजाय क्लाइंट-साइड कोड वाले मॉड्यूल/क्लास को एनोटेट कर सकें यदि आप .NET 4.5 को लक्षित कर रहे हैं।

namespace Website 

open IntelliFactory.WebSharper 

module HelloWorld = 

    module private Server = 

     [<Rpc>] 
     let main() = async { return "World" } 

    [<JavaScript>] // or [<ReflectedDefinition>] 
    module Client = 

     open IntelliFactory.WebSharper.Html 

     let sayHello() = 
      async { 
       let! world = Server.main() 
       JavaScript.Alert <| "Hello " + world 
      } 

     let btn = 
      Button [Text "Click Me"] 
      |>! OnClick (fun _ _ -> 
       async { 
        do! sayHello() 
       } |> Async.Start) 

     let main() = Div [btn] 

    type Control() = 

     inherit Web.Control() 

     [<JavaScript>] 
     override __.Body = Client.main() :> _ 
+0

मैं केवल जावास्क्रिप्ट प्रतिस्थापन के लिए websharper का उपयोग करता हूं, इसलिए मुझे वास्तव में सर्वर की ओरवाह नहीं है, वैसे भी मॉड्यूल एनोटेशन विधि के बाद बहुत बेहतर है। – ais

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

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