मुझे स्पष्ट रूप से कुछ अवधारणा/समझ याद आ रही है और सबसे निश्चित रूप से जावास्क्रिप्ट ओओ मूल बातें!क्या मेरे पास आवश्यकताजेएस मॉड्यूल के कई उदाहरण हो सकते हैं?
मैं RequJS का उपयोग करके प्यार करता हूं, और मेरा वेब ऐप अब पागल कोड के पूरे ढेर के बजाय एक संरचित ऐप की तरह दिखता है।
मैं समझने के लिए संघर्ष कर रहा हूं कि निम्नलिखित कैसे संभव है।
मैं एक मॉड्यूल जो dataservice_base के रूप में बुलाया एक आधार dataservice मॉड्यूल के रूप में कार्य करता है इस प्रकार है:
define(['dataservices/dataservice'], function (dataservice) {
// Private: Route URL
this.route = '/api/route-not-set/';
var setRoute = function (setRoute) {
this.route = setRoute;
return;
}
// Private: Return route with/without id
var routeUrl = function (route, id) {
console.log('** Setting route to: ' + route);
return route + (id || "")
}
// Private: Returns all entities for given route
getAllEntities = function (callbacks) {
return dataservice.ajaxRequest('get', routeUrl())
.done(callbacks.success)
.fail(callbacks.error)
};
getEntitiesById = function (id, callbacks) {
return dataservice.ajaxRequest('get', routeUrl(this.route, id))
.done(callbacks.success)
.fail(callbacks.error)
};
putEntity = function (id, data, callbacks) {
return dataservice.ajaxRequest('put', routeUrl(this.route, id), data)
.done(callbacks.success)
.fail(callbacks.error)
};
postEntity = function (data, callbacks) {
return dataservice.ajaxRequest('post', routeUrl(this.route), data)
.done(callbacks.success)
.fail(callbacks.error)
};
deleteEntity = function (id, data, callbacks) {
return dataservice.ajaxRequest('delete', routeUrl(this.route, id), data)
.done(callbacks.success)
.fail(callbacks.error)
};
// Public: Return public interface
return {
setRoute: setRoute,
getAllEntities: getAllEntities,
getEntitiesById: getEntitiesById,
putEntity: putEntity,
postEntity: postEntity,
deleteEntity: deleteEntity
};
});
आप देख सकते हैं, मैं संदर्भित हूँ dataservices/dataservice, जो वास्तव में कोर AJAX कॉल तंत्र है (दिखाया नहीं गया है, लेकिन वास्तव में सिर्फ एक मूलभूत jQuery AJAX कॉल एक रैपर में)।
define(['dataservices/dataservice_base', 'dataservices/dataservice_base', 'dataservices/dataservice_base'], function (dataservice_profile, dataservice_qualifications, dataservice_subjects) {
// Set the service route(s)
dataservice_profile.setRoute('/api/profile/');
dataservice_qualifications.setRoute('/api/qualification/');
dataservice_subjects.setRoute('/api/subject/');
आप देख सकते हैं, मैं शामिल करने के लिए कोशिश कर रहा हूँ: -
मुझे क्या करना कोशिश कर रहा हूँ इस आधार dataservice मॉड्यूल "instanced" इस प्रकार है (केवल स्निपेट कोड एक और मॉड्यूल के भीतर) होने की अनुमति है एक ही dataservice_base (ऊपर परिभाषित) 3 बार, लेकिन समारोह के संदर्भ में, मैं नामित वार्स द्वारा प्रत्येक उदाहरण का उल्लेख करने के कोशिश कर रहा हूँ अर्थात्:
dataservice_profile, dataservice_qualifications, dataservice_subjects
.. और निश्चित रूप से मैं मॉड्यूल में आगे का उपयोग करने के लिए उन सभी उदाहरणों के लिए एक अद्वितीय setRoute मान सेट करने में सक्षम होने का प्रयास कर रहा हूं .. सामान्य कॉल (प्राप्त, रखता है, पोस्ट आदि) का लाभ उठाने के दौरान।
जाहिर है, मुझे यहां कुछ चीजें याद आ रही हैं .. लेकिन मुझे सड़क पर वापस इंगित करने में कोई मदद बहुत आभारी रूप से प्राप्त की जाएगी !!
दयालु सम्मान, डेविड।
मैं इस अवधारणा के साथ संघर्ष कर रहा था। यह जवाब यह बहुत स्पष्ट बनाता है! ... मुझे लगता है कि यहां कुंजी यह समझना है कि RequJS हमेशा एक मॉड्यूल का एक ही उदाहरण देता है, इससे कोई फर्क नहीं पड़ता कि आपको कितनी बार "आवश्यकता" है। यदि आपका मॉड्यूल एक स्थिर ऑब्जेक्ट के बजाय एक कन्स्ट्रक्टर फ़ंक्शन देता है, तो आप क्लाइंट मॉड्यूल में नए कीवर्ड का उपयोग करके कन्स्ट्रक्टर फ़ंक्शन से उदाहरण बना सकते हैं। वही कन्स्ट्रक्टर फ़ंक्शन हर बार RequJS द्वारा वापस किया जाता है, लेकिन यही वह है जिसे हम चाहते हैं क्योंकि यह एक टेम्पलेट है, एक वर्ग है। यह उस वर्ग से उदाहरण बनाने के लिए क्लाइंट मॉड्यूल का काम है। –
"" मुझे लगता है कि यहां कुंजी यह समझना है कि RequJS हमेशा एक मॉड्यूल का एक ही उदाहरण देता है, इससे कोई फर्क नहीं पड़ता कि आपको कितनी बार "आवश्यकता है"। "" लगभग। यह पहला आवश्यक उदाहरण कैश करता है, लेकिन केवल तभी यदि यह एक ही सटीक पथ पर एक ही सटीक मॉड्यूल है। इसका मतलब है कि यदि आपके पास 2 अलग-अलग पथों (अलग-अलग हिस्सों के लिए आपके ऐप) में समान lib "xxx" है, जैसे: ऐप/मॉड्यूल/foo/xxx और ऐप/मॉड्यूल/बार/xxx, तो प्रत्येक को लाने के दौरान प्रत्येक की आवश्यकता होती है अलग उदाहरण ऐसा हो सकता है उदा। यदि आपके पास प्रत्येक मॉड्यूल के लिए एक अलग पैकेज.जेसन है, और वे एक ही पुस्तकालय के लिए पूछते हैं। – Hejazzman