मैं RequJS में एक शिम का उपयोग करके हाईचार्ट्स लाइब्रेरी को लोड करने का प्रयास कर रहा हूं। हालांकि, जब हाईचार्ट लोड होता है, तो यह अपवाद फेंकता है क्योंकि यह उस jQuery विधियों तक नहीं पहुंच सकता है जिस पर यह निर्भर करता है।RequJS का उपयोग करके शिम के माध्यम से हाइचार्ट्स लोड करना और jQuery निर्भरता को बनाए रखना
config की आवश्यकता होती है लग रहा है तो जैसे:
require.config({
baseUrl: "js",
shim: {
'libs/highcharts/highcharts.src.js': {
deps: ['jquery'],
exports: function(jQuery)
{
this.HighchartsAdapter = jQuery;
return this.Highcharts;
}
}
}
});
अपवाद है कि फेंक दिया जाता है है:
Uncaught TypeError: undefined is not a function
और इस लाइन के संबंध में है:
dataLabels: merge(defaultLabelOptions, {
मुद्दा है merge
कॉल, जो अंततः स्वयं को jQuery पर वापस नक्शा (या कुछ अन्य एडाप्टर जो हाइच कला का समर्थन करता है; लेकिन मैं बस jQuery का उपयोग कर रहा हूँ)।
मुझे यकीन नहीं है कि हाइचार्ट्स को RequJS और shim का उपयोग करके jQuery तक पहुंच प्राप्त हो रही है।
क्या किसी ने पहले आवश्यकताजेएस और हाईचार्ट्स का उपयोग किया है? मुझे लगता है कि यह मुद्दा हाईचार्ट्स के लिए विशिष्ट नहीं है, लेकिन किसी भी पुस्तकालय जिसमें अन्य प्रकार की निर्भरताएं हैं।
किसी भी सलाह या सही दिशा के लिए अंक के लिए अग्रिम धन्यवाद!
आगे संदर्भ जोड़ने के लिए उम्मीद है कि कोई है जो require.js या शिम्स से परिचित है भी परिचित Highcharts से परिचित होने की बिना मदद करने के लिए सक्षम हो जाएगा में,, यहाँ कुछ स्रोत है कि Highcharts में इस merge
विधि सेट है
var globalAdapter = win.HighchartsAdapter,
adapter = globalAdapter || {},
// Utility functions. If the HighchartsAdapter is not defined,
// adapter is an empty object
// and all the utility functions will be null. In that case they are
// populated by the
// default adapters below.
// {snipped code}
merge = adapter.merge
// {snipped code}
if (!globalAdapter && win.jQuery) {
var jQ = win.jQuery;
// {snipped code}
merge = function() {
var args = arguments;
return jQ.extend(true, null, args[0], args[1], args[2], args[3]);
};
// {snipped code}
}
win
वस्तु एक संदर्भ स्क्रिप्ट की शुरुआत में window
करने के लिए स्थापित है। इसलिए, मैंने सोचा कि शिम पर निर्यात विधि में window.jQuery = jQuery;
जोड़ना परिणामस्वरूप उच्च संदर्भों को jQuery संदर्भ उठा रहा है; लेकिन ऐसा नहीं हुआ।
फिर, इस बिंदु पर किसी भी अंतर्दृष्टि, जानकारी, सलाह, या हेकल्स की सराहना की जाएगी - मैं पूरी तरह से नुकसान पहुंचा रहा हूं, और यह पूछना शुरू कर रहा हूं कि ब्राउज़र जावास्क्रिप्ट में कार्यान्वित करने और एएमडी पैकेज सिस्टम की कोशिश करने के लिए यह भी मूल्यवान है।
pabera से जवाब को स्वीकार नीचे मैं इसे अपने प्रश्न को प्रतिबिंबित करने के लिए कैसे अपने जवाब मेरे समाधान में मदद की अद्यतन करने के लिए उचित सोचा के बाद (हालांकि, यह मूल रूप से उसके जवाब है)।
RequJS "एएमडी" समर्थित libs खोजने के लिए "पथ" का उपयोग करता है और उन्हें आपके पृष्ठ पर लोड करता है। "शिम" ऑब्जेक्ट आपको पथों में परिभाषित पुस्तकालयों के लिए निर्भरताओं को परिभाषित करने की अनुमति देता है। आवश्यकताएं स्क्रिप्ट लोड करने का प्रयास करने से पहले निर्भरताओं को लोड किया जाना चाहिए।
निर्यात संपत्ति यह निर्धारित करने के लिए एक तंत्र प्रदान करती है कि पुस्तकालय लोड होने पर निर्धारित करने के लिए कैसे किया जाए। Jquery, रीढ़ की हड्डी, सॉकेटियो, आदि जैसे मूल libs के लिए वे सभी कुछ विंडो स्तर चर (Backbone
, io
, jQuery
और $
, आदि) निर्यात करते हैं। आप बस उस चर नाम को exports
संपत्ति के रूप में प्रदान करते हैं, और requjs यह निर्धारित करने में सक्षम होंगे कि lib कब लोड होता है।
आपकी परिभाषाएं पूरी होने के बाद, आप requirejs
'define
फ़ंक्शन का उपयोग कर सकते हैं।
यहाँ मेरी उदाहरण require.config
वस्तु है: पहले उल्लेख किया
require.config({
baseUrl: "/js/",
paths: {
jquery: 'jquery',
socketio: 'http://localhost:8000/socket.io/socket.io', //for loading the socket.io client library
highcharts: 'libs/highcharts/highcharts.src',
underscore: 'libs/underscore',
backbone: 'libs/backbone'
},
shim: {
jquery: {
exports: 'jQuery'
},
socketio: {
exports: 'io'
},
underscore: {
exports: '_'
},
backbone: {
deps: ['jquery', 'underscore'],
exports: 'Backbone'
},
highcharts: {
deps: ['jquery'],
exports: 'Highcharts'
}
}
});
pabera रूप, इस Require.JS
संस्करण 2.0.1
के लिए है।
मुझे आशा है कि किसी को इस से बाहर कुछ का उपयोग हो जाता है; मुझे पता है कि सड़क ने मुझे थोड़ी देर के लिए अवरुद्ध कर दिया; इसलिए उम्मीद है कि हमने आपको दीवार पर उसी स्थान पर अपने सिर को टक्कर देने से रोक दिया है, जिसे हमने पोस्ट करके किया था।
मैं इसे एक शॉट दूंगा और देखें कि मैं किसके साथ आया हूं; जवाब के लिए धन्यवाद! –
मैं 'requ.js 2.0.1' का उपयोग करता हूं, बस यह महत्वपूर्ण है। गुड लक – pabera
मैं अपने स्पष्टीकरण/पथ/शिम्स उदाहरण के साथ सामान्य require.js (w/jQuery के बजाय) का उपयोग करने के बदल गया है और jQuery शिम इस्तेमाल किया,। दस्तावेज पढ़ने के बाद कुछ और, अब मैं समझता हूं कि क्या हो रहा है - धन्यवाद एक टन! –