क्लाइंट-साइड टाइपप्रति कोड के MVC मॉडल डाटा पासिंग

वोट
11

MVC का उपयोग कर, मैं कभी कभी क्लाइंट साइड जावास्क्रिप्ट करने के लिए सर्वर के मॉडल डेटा पास रेजर का उपयोग करके जावास्क्रिप्ट में इंजेक्ट किया, इस प्रकार है:

<script type=text/javascript>
    var myClientGuid = '@Model.MyServerGuid';
</script>

यह JavaScript वैरिएबल नामित सेट myClientGuidसर्वर साइड मॉडल संपत्ति के मूल्य के लिए MyServerGuid। जब यह ग्राहक तक पहुँच जाता है, कोड ब्राउज़र के भीतर इस तरह दिखता है:

<script type=text/javascript>
    var myClientGuid = 'EF0077AB-0482-4D91-90A7-75285F01CA6F';
</script>

यह बाहरी JavaScript फ़ाइलों को इस चर का उपयोग करने की अनुमति देता है।

मेरा प्रश्न टाइपप्रति में है, के बाद से सभी कोड बाहरी फ़ाइलों के माध्यम से संदर्भित किया जाना चाहिए, कोड टाइपप्रति लिए सर्वर साइड क्षेत्रों पारित करने के लिए सबसे अच्छा तरीका क्या है? बाहरी कोड फ़ाइलों उस्तरा कोड नहीं हो सकता। मैं उसी तकनीक का उपयोग करना चाहिए, जैसा कि ऊपर, दृश्य में, परियोजना के भीतर जावास्क्रिप्ट और टाइपप्रति मिश्रण?

09/10/2012 को 19:13
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
17

टाइपप्रति संकलक सिर्फ जानना चाहता है कि अपने सर्वर साइड फ़ील्ड मौजूद हैं की जरूरत है। ऐसा करने के लिए सबसे आसान तरीका है परिवेश घोषणाओं (कल्पना की धारा 10 देखें) का प्रयोग है। उदाहरण के लिए, यदि आप एक .ts फ़ाइल myClientGuid का उपयोग करने के लिए आवश्यक है कि था, तुम कर सकते हो

declare var myClientGuid: string;

आपका मुख्य .ts फ़ाइल के शीर्ष पर। संकलक इस वर घोषणा के लिए कोड उत्पन्न नहीं होगा, इसलिए आप कुछ भी पीटना नहीं होंगे। अब किसी भी फाइल का संदर्भ है कि .ts फ़ाइल को पता चल जाएगा एक myClientGuid स्ट्रिंग वैश्विक क्षेत्र में उपलब्ध नहीं है।

09/10/2012 को 19:19
का स्रोत उपयोगकर्ता

वोट
2

एक अन्य समाधान (वैश्विक चर से बचने के लिए) एक समारोह है कि पैरामीटर के रूप में की जरूरत है सर्वर साइड क्षेत्रों लेता में टाइपप्रति कोड रैप करने के लिए है:

टाइपप्रति फ़ाइल में:

function setupMyPage(myGuid:string) {
   ...
}

.cshtml में:

<script src='@Url.Content("<path-to-typescript>")'></script>
<script>
    setupMyPage('@Model.MyServerGuid');
</script>

आप RequireJS का उपयोग कर रहे हैं, तो आप भी निर्यात कर सकते हैं setupMyPageएक मॉड्यूल के रूप समारोह, वैश्विक नामस्थान के लिए समारोह को जोड़ने से बचने के लिए:

टाइपप्रति फ़ाइल में:

export = setupMyPage;

.cshtml में:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
08/08/2014 को 12:24
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more