मैगेंटो 2 के रिक्जेस्ट आधारित ऑब्जेक्ट सिस्टम में "मिक्सिन्स" नामक एक सुविधा होती है। एक Magento 2 मिक्सिन नहीं है जो एक सॉफ्टवेयर इंजीनियर आमतौर पर मिक्सिन / विशेषता के रूप में सोचता है । इसके बजाय, एक Magento 2 मिक्सिन आपको एक वस्तु / मूल्य जो मुख्य प्रोग्राम द्वारा उपयोग किया जाता है, उससे पहले एक आवश्यकता मॉड्यूल द्वारा लौटाए गए ऑब्जेक्ट / मूल्य को संशोधित करने की अनुमति देता है। आप एक Magento 2 मिक्सिन को इस तरह कॉन्फ़िगर करते हैं (एक आवश्यकता-config -js फ़ाइल के माध्यम से)
var config = {
'config':{
'mixins': {
//the module to modify
'Magento_Checkout/js/view/form/element/email': {
//your module that will do the modification
'Pulsestorm_RequireJsRewrite/hook':true
}
}
}
};
उसके बाद, आपके पास hook.js
(या आपके द्वारा कॉन्फ़िगर किया गया कोई भी आवश्यकता मॉड्यूल),
define([], function(){
console.log("Hello");
return function(theObjectReturnedByTheModuleWeAreHookingInto){
console.log(theObjectReturnedByTheModuleWeAreHookingInto);
console.log("Called");
return theObjectReturnedByTheModuleWeAreHookingInto;
};
});
एक समारोह लौटें। Magento इस फ़ंक्शन को "मॉड्यूल" के संदर्भ में पास करते हुए कॉल करेगा, जिसे आप संशोधित करना चाहते हैं। हमारे उदाहरण में यह आवश्यकता के मॉड्यूल द्वारा लौटा दी गई वस्तु होगी Magento_Checkout/js/view/form/element/email
। यह एक फ़ंक्शन या स्केलर मान भी हो सकता है (यह इस पर निर्भर करता है कि आवश्यकताएँ मॉड्यूल रिटर्न क्या है)।
यह सिस्टम mixins
इसलिए कहा जाता है क्योंकि यह आपको मूल व्यवहार की extend
विधि का समर्थन करता है अगर ऑब्जेक्ट द्वारा लौटाया जाता है तो आप मिक्सिन को व्यवहार की तरह बना सकते हैं ।
define([], function(){
'use strict';
console.log("Hello");
var mixin = {
ourExtraMethod = function(){
//...
}
};
return function(theObjectReturnedByTheModuleWeAreHookingInto){
console.log(theObjectReturnedByTheModuleWeAreHookingInto);
console.log("Called");
return theObjectReturnedByTheModuleWeAreHookingInto.extend(mixin);
};
});
हालाँकि, सिस्टम ही मॉड्यूल ऑब्जेक्ट निर्माण में हुक करने का एक तरीका है।
प्रस्तावना समाप्त - क्या किसी को पता है कि मैगनेटो ने इस कार्यक्षमता को कैसे लागू किया है? रिक्वायरज वेबसाइट मिक्सिंस का उल्लेख नहीं करती है (हालाँकि Google को लगता है कि आप रिक्जेस्ट के प्लगइन पेज चाहते हैं )।
requirejs-config.js
फ़ाइलों के बाहर , Magento 2 के मुख्य जावास्क्रिप्ट में केवल mixins
तीन फ़ाइलों का उल्लेख है
$ find vendor/magento/ -name '*.js' | xargs ack mixins
vendor/magento/magento2-base/lib/web/mage/apply/main.js
73: if (obj.mixins) {
74: require(obj.mixins, function () {
79: delete obj.mixins;
vendor/magento/magento2-base/lib/web/mage/apply/scripts.js
39: if (_.has(obj, 'mixins')) {
41: data[key].mixins = data[key].mixins || [];
42: data[key].mixins = data[key].mixins.concat(obj.mixins);
43: delete obj.mixins;
vendor/magento/magento2-base/lib/web/mage/requirejs/mixins.js
5:define('mixins', [
24: * Adds 'mixins!' prefix to the specified string.
30: return 'mixins!' + name;
76: * Iterativly calls mixins passing to them
80: * @param {...Function} mixins
84: var mixins = Array.prototype.slice.call(arguments, 1);
86: mixins.forEach(function (mixin) {
96: * Loads specified module along with its' mixins.
102: mixins = this.getMixins(path),
103: deps = [name].concat(mixins);
111: * Retrieves list of mixins associated with a specified module.
114: * @returns {Array} An array of paths to mixins.
118: mixins = config[path] || {};
120: return Object.keys(mixins).filter(function (mixin) {
121: return mixins[mixin] !== false;
126: * Checks if specified module has associated with it mixins.
137: * the 'mixins!' plugin prefix if it's necessary.
172: 'mixins'
173:], function (mixins) {
237: deps = mixins.processNames(deps, context);
252: queueItem[1] = mixins.processNames(lastDeps, context);
mixins.js
फ़ाइल एक RequireJS प्लगइन प्रतीत होता है (के आधार पर !...
टिप्पणी में उल्लेख है - यह सही है), लेकिन यह नहीं 100% स्पष्ट है जब main.js
या scripts.js
Magento द्वारा लाया जाता है, या कैसे कस्टम mixins
विन्यास से यह बनाता है requirejs-config.js
श्रोता / हुक प्रणाली में ऊपर वर्णित।
क्या किसी के पास इस बात की व्याख्या है कि इस प्रणाली को कैसे लागू किया गया / लागू किया गया, एक आँख के साथ डीबग करने में सक्षम होने के कारण "मिक्सिन" क्यों लागू किया जा सकता है या नहीं?
mixins
विन्यास में क्याx-magento-init
औरdata-mage-init
विन्यास? उदाहरण के लिए - आप ऊपर के उदाहरण में,path/to/configuration-modifier
एक कॉलबैक भी लौटाएंगे जो कॉन्फ़िगरेशन डेटा को संशोधित कर सकता है? या कुछ और?