2016-11-04 7 views
8

मैं एएसपी.नेट-एमवीसी ढांचे का उपयोग कर एक नई परियोजना शुरू कर रहा हूं। मैं जावास्क्रिप्ट के स्थान पर इस प्रोजेक्ट में टाइपस्क्रिप्ट का उपयोग करना चाहता हूं। टाइपस्क्रिप्ट को विजुअल स्टूडियो द्वारा आसानी से समर्थित किया जाता है लेकिन यह .cshtml रेजर फ़ाइलों के साथ संगत (पूरी तरह से) प्रतीत नहीं होता है। मैं .s फ़ाइल के भीतर अपनी कक्षाएं बनाने में सक्षम हूं और उन वर्गों को मेरी .cshtml फ़ाइल में कॉल करता हूं, समस्या तब होती है जब मैं .cshtml फ़ाइल में ऑब्जेक्ट के पैरामीटर में पास करता हूं TypeSafety को अनदेखा किया जाता है और फ़ंक्शन चलाया जाता है जैसे फ़ंक्शन चलाया जाता है प्रकार कभी परिभाषित नहीं किया गया था।टाइपस्क्रिप्ट .cshtml रेजर फ़ाइलें

.ts

export class SomeClass { 

    name: number; 

    constructor(public tName: number) { 
     this.name = tName; 
    } 

    public sayName() { 
     alert(this.name); 
    } 
} 

फ़ाइल .cshtml फ़ाइल

var instance = new SomeClass("Timmy"); 
instance.sayName(); 

आप देख सकते हैं, मैं निर्माता के लिए एक स्ट्रिंग गुजर रहा है, भले ही मैं स्पष्ट रूप से केवल करने के लिए पैरामीटर परिभाषित संख्याओं को स्वीकार करें, लेकिन TypeSafely को अनदेखा किया जाता है और टाइपस्क्रिप्ट/जावास्क्रिप्ट निष्पादित करता है जैसे कोई समस्या नहीं है।

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

+1

मैंने सोचा कि tsc '.ts' एक्सटेंशन के साथ कोड संकलित (ट्रांसपाइल) करेगा। क्या मै गलत हु ? – Shyju

उत्तर

6

टाइपप्रति transpiler केवल चेक और फ़ाइलों कि इसमें केवल transpiles:

  • जावास्क्रिप्ट
  • टाइपप्रति से जोड़ा कुछ syntaxique चीनी कोड के साथ जावास्क्रिप्ट (स्थिर टाइपिंग, सामान्य वर्ग आदि ...)

सीएसएचटीएम फाइल मूल रूप से रेजर/सी # कोड और निश्चित रूप से एचटीएमएल/जावास्क्रिप्ट/सीएसएस को शामिल करने के लिए बनाई गई हैं।

कुछ डेवलपर्स को सीधे जावास्क्रिप्ट कोड और सीएसएस स्टाइलशीट को सीएसटीएमएल फाइलों में जोड़ने का प्रयास किया जाता है और यह एक अच्छा अभ्यास नहीं है।

जावास्क्रिप्ट कोड और भी सीएसएस शैली को उसकी अपनी फ़ाइल में होना चाहिए। फिर अपने CSHTML में script (जावास्क्रिप्ट) या style (सीएसएस) टैग का उपयोग करके फ़ाइल के संदर्भ हैं।

जावास्क्रिप्ट कोड आपके विचार (CSHTML या सिर्फ एचटीएमएल) में सीधे लाना सिफारिश नहीं की जाती है क्योंकि यह Unobtrusive JavaScript के निम्नलिखित प्रिंसिपे तोड़: एक वेब से

कार्यक्षमता का पृथक्करण ("व्यवहार परत") पेज की संरचना/सामग्री और प्रस्तुति (स्रोत विकिपीडिया)

कुछ ASP.Net MVC डेवलपर्स अभी भी अपने जावास्क्रिप्ट कोड अपने उस्तरा में सीधे डाल करने के लिए जारी रखने के लिए beca विचार उपयोग करें कि उन्हें दृश्य मॉडल से सीधे कुछ जावास्क्रिप्ट कोड पर पास करने की आवश्यकता है। जब जावास्क्रिप्ट कोड दृश्य में पहले से ही है, यह बिना किसी जटिलता के डेटा पास करने के लिए आसान है। लेकिन मैंने पहले ही कहा है कि यह अच्छा नहीं है ;-)।

बातें इस तरह टूट जाता है कि Unobntrusive जावास्क्रिप्ट प्रिंसिपेस से बचने जा सकता है। सभी डेटा जावा स्क्रिप्ट कोड के द्वारा पढ़ा जा करने की जरूरत है कि जैसे कि आपका HTML तत्वों में डेटा विशेषता का उपयोग करके संग्रहित किया जाना चाहिए

<span id="mySpan" data-t-name="123456">Hello World</span> 

फिर अपने टाइपप्रति कोड में सिर्फ jQuery (या जावास्क्रिप्ट वेनिला) का उपयोग डेटा आप इस तरह अपने CSHTML ध्यान में रखते हुए सेट प्राप्त करने के लिए:

let tName: number = int.Parse($("#mySpan").data("t-name")); 
var instance = new SomeClass(tName); 
instance.sayName(); 

उसके बाद, संदर्भ टाइपप्रति से उत्पन्न js फ़ाइल अपने सीएसएचटीएमएल में।

उम्मीद है कि यह मदद करता है।

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