5

मैं Protovis का उपयोग कर दृश्यावलोकन बनाने के लिए चाहते हैं, लेकिन CoffeeScript बजाय जावास्क्रिप्ट में लेखन (आंशिक रूप से (x)->x समारोह अंकन लेकिन साथ ही अन्य कारणों के लिए)कॉफीस्क्रिप्ट में प्रोटोविस कोड लिखना संभव है?

यह संभव है? क्या <script> टैग का उपयोग मैं करता हूं और क्या स्क्रिप्ट टैग का कोई विशेष क्रम आवश्यक है?

धन्यवाद।

संपादित करें: यदि संभव हो तो मैं मैन्युअल संकलन चरण से बचना चाहता हूं।

उत्तर

7

सवाल एक छोटे से स्पष्ट करने के लिए: Protovis कोड एक विशेष टैग का उपयोग कर लिखा है,

<script type="text/javascript+protovis"> 

के बाद Protovis पुस्तकालय शामिल किया गया है। हालांकि, यह कोड को HTML के साथ रेखांकित किया जाना चाहिए। ब्राउज़र text/javascript+protovis प्रकार को नहीं पहचानता है, इसलिए यह टैग को अनदेखा करता है; Protovis इसे src से जुड़ी किसी भी फाइल को लोड करने के प्रयास किए बिना टैग में शामिल पाठ में पढ़ता है और पढ़ता है।

प्रोटॉविस ऐसा क्यों करता है? चूंकि यह जावास्क्रिप्ट 1.8 कोड जावास्क्रिप्ट 1.6 कोड में कनवर्ट करने के लिए कोड के माध्यम से रेगेक्स-आधारित पार्सर चलाता है; इस तरह, आप अत्याधुनिक जावास्क्रिप्ट सुविधाओं का उपयोग कर सकते हैं, और आपका कोड अभी भी पुराने ब्राउज़र में चलाएगा। बहुत ही शांत।

जबकि आप निश्चित रूप से कॉफीस्क्रिप्ट कोड लिख सकते हैं, इसे संकलित कर सकते हैं, और फिर इसे पेस्ट कर सकते हैं, जो एक बहुत ही कठिन निर्माण प्रक्रिया के लिए तैयार होगा। अच्छी खबर यह है कि यह असंभव (असंभव?) है कि आपको कॉफीस्क्रिप्ट कंपाइलर से कोड मिलेगा जो जेएस 1.6 फीचर्स से परे कुछ भी उपयोग करता है; इनमें से अधिकतर सुविधाओं को कॉफीस्क्रिप्ट में कुछ रूप में बेक किया जाता है। उदाहरण के लिए, अज्ञात कार्यों के लिए सरणी समझ, और एक संक्षिप्त वाक्यविन्यास। इसका मतलब है कि आप सिर्फ

<script type="text/javascript" src="myProtovisCode.js"></script> 
अपने संकलित CoffeeScript कोड के लिए

उपयोग कर सकते हैं (या text/coffeescriptcoffee-script.js पुस्तकालय के साथ, विकास के लिए)।

वास्तविक चाल प्रोटोकिस उदाहरणों का अनुवाद कर रही है, उनके अपरिचित जेएस 1.8 वाक्यविन्यास के साथ, कॉफीस्क्रिप्ट में। उदाहरण के लिए,

cell.add(pv.Dot) 
    .def("x", function(k0, k1) pv.Scale.linear(flowers, function(d) d[k0]).range(0, s)) 
    .def("y", function(k0, k1) pv.Scale.linear(flowers, function(d) d[k1]).range(0, s)) 

, संक्षिप्त जे एस 1.8 अज्ञात फ़ंक्शन सिंटैक्स का उपयोग करता है, जहां function(x) x * xfunction(x) { return x * x; } के लिए आशुलिपि है।बेशक, इस CoffeeScript को आसानी से अनुवाद:

cell.add(pv.Dot) 
    .def("x", (k0, k1) -> pv.Scale.linear(flowers, (d) -> d[k0]).range(0, s)) 
    .def("y", (k0, k1) -> pv.Scale.linear(flowers, (d) -> d[k1]).range(0, s)) 

आगे संदर्भ के लिए, बाहर New in JavaScript 1.8 से अधिक मोज़िला डॉक्स पर जाँच (केवल फ़ायरफ़ॉक्स ब्राउज़र है कि मूल रूप से वर्तमान में जे एस 1.8 का समर्थन करता है किया जा रहा है)।

2

कॉफीस्क्रिप्ट में केवल विकास उद्देश्यों के लिए लिखना बेहतर है, और फिर <script> में शामिल करने के लिए सादा जेएस में संकलित करना बेहतर है।

-c ध्वज का उपयोग कर संकलित:

coffee -c someFile.coffee 

उत्पादन एक ही निर्देशिका में someFile.js हो जाएगा।

+0

संपादित प्रश्न: यदि संभव हो तो मैं मैन्युअल संकलन चरण से बचना चाहता हूं ... – nicolaskruchten

+0

आप पृष्ठ को प्रस्तुत करने के समान सिनात्रा या कुछ ऐसा इस्तेमाल कर सकते हैं और फ्लाई पर जावास्क्रिप्ट को कॉफ़ीस्क्रिप्ट में परिवर्तित कर सकते हैं। –

1

ठीक है मैंने इसे थोड़ा सा खेला है और मैं वास्तव में <script type="text/coffeescript"> टैग का उपयोग करके प्रोफोविस को कॉफ़ीस्क्रिप्ट के साथ उपयोग कर सकता हूं, जो वैकल्पिक रूप से src="x.coffee" विशेषता हो सकता है। कोई बाहरी संकलन आवश्यक है। जाहिर है, ब्राउज़र को प्रत्येक बार पेज लोड होने पर कॉफ़ीस्क्रिप्ट को जावास्क्रिप्ट में संकलित करने की आवश्यकता होती है लेकिन त्वरित विज़ुअलाइजेशन कार्यों के लिए यह मेरे लिए काम करता है।

+0

आगे स्पष्टीकरण के लिए मेरे सिमुल-पोस्ट उत्तर देखें। ध्यान दें कि टेक्स्ट/कॉफ़ीस्क्रिप्ट स्क्रिप्ट सभी अन्य स्क्रिप्ट के बाद चलती हैं, भले ही आप टैग कहां डालते हैं, क्योंकि वे 'कॉफी-स्क्रिप्ट.जेएस' से अजाक्स के माध्यम से लोड होते हैं। –

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

  • कोई संबंधित समस्या नहीं^_^