Magento 2'nin RequireJS tabanlı nesne sistemleri, "mixins" adı verilen bir özellik içerir. Bir Magento 2 mixini, bir yazılım mühendisinin normalde bir mixin / özellik olarak düşüneceği şey değildir . Bunun yerine, bir Magento 2 karışımı, bir nesne / değer ana program tarafından kullanılmadan önce bir RequireJS modülü tarafından döndürülen nesneyi / değeri değiştirmenizi sağlar. Bunun gibi bir Magento 2 karışımı yapılandırabilirsiniz (requirjs-config.js dosyasıyla)
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
}
}
}
};
Ardından, hook.js(veya yapılandırdığınız RequireJS modülüne sahip olmanız) gerekir,
define([], function(){
console.log("Hello");
return function(theObjectReturnedByTheModuleWeAreHookingInto){
console.log(theObjectReturnedByTheModuleWeAreHookingInto);
console.log("Called");
return theObjectReturnedByTheModuleWeAreHookingInto;
};
});
bir işlev döndürür. Magento, değiştirmek istediğiniz "modül" e referans vererek bu işlevi çağıracaktır. Örneğimizde bu, RequireJS modülü tarafından döndürülen nesne olacaktır Magento_Checkout/js/view/form/element/email. Bu aynı zamanda bir işlev, hatta bir ölçekleyici değeri olabilir (RequireJS modülünün döndürdüğüne bağlı olarak).
Bu sistem mixins, orijinal RequireJS modülü tarafından döndürülen nesne extendyöntemi destekliyorsa, mixin benzeri davranışlar oluşturmanıza izin verdiği için çağrılmış gibi görünür .
define([], function(){
'use strict';
console.log("Hello");
var mixin = {
ourExtraMethod = function(){
//...
}
};
return function(theObjectReturnedByTheModuleWeAreHookingInto){
console.log(theObjectReturnedByTheModuleWeAreHookingInto);
console.log("Called");
return theObjectReturnedByTheModuleWeAreHookingInto.extend(mixin);
};
});
Ancak, sistemin kendisi sadece modül nesnesi oluşturmaya bağlamanın bir yoludur.
Önsöz bitti - Magento'nun bu işlevselliği nasıl uyguladığını bilen var mı? RequireJS web sitesi bahsedilmiyor (Google, RequireJS'in eklenti sayfasını isteyebileceğinizi düşünmesine rağmen ).
requirejs-config.jsDosyaların dışında , Magento 2'nin sadece temel javascriptinden bahsediyormixins üç dosyada
$ 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.jsDosya eklentisi bir RequireJS olarak görünmektedir (dayalı !...? Yorumlardaki bahisler - bu doğru) ama% 100 net değil ne zaman main.jsyascripts.js Magento tarafından çağırılan veya özel nasıl mixinsyapılandırma onu yapar requirejs-config.jsdinleyici / kanca sistemi içine Yukarıda tarif edilen.
Bu sistemin nasıl uygulandığı / uygulandığı / yapılandırıldığı hakkında bir açıklama yapan var mı?
mixinsyapılandırma nex-magento-initvedata-mage-inityapılandırmalar ne yapıyor ? ie - yukarıdaki örnekte,path/to/configuration-modifieryapılandırma verilerini değiştirebilecek bir geri arama da döndürür mü? Veya başka bir şey?