在Magento2中,如果我的記憶爲我服務,則最後查看的項目將使用黑骨骼js進行處理。所以,如果你包含了一個常用的jQuery插件,並把一個onReady事件,它將無法正常工作,因爲黑客尚未生成HTML Magento2中的Javascript是相當複雜的,有需要js,有黑色的js和那裏是所有Magento2的東西。
首先您需要創建一個新的magento2小部件。這裏是一個例子:
define([
'jquery',
'mage/translate',
], function($, $t) {
"use strict";
$.widget('myVendor.myWidgetName', {
options: {
buttonSelector: ['button[special]'],
},
_create: function() {
this._bindClick();
},
_bindClick : function() {
var events = {};
$.each(this.options.buttonSelector, function (index, value) {
events['click ' + value] = '_doMyStuff';
});
this._on(events);
},
_doMyStuff : function (e) {
var self = this;
var element = $(e.currentTarget);
// DO your stuff here
},
});
return $.myVendor.myWidgetName;
});
那麼這裏發生了什麼? define函數是requireJs,我只需要jquery和magento的翻譯系統。如果還有一個widget,你需要使用lastViewed部件,以便要求js可以按照正確的順序加載內容。
這裏要說明的是define部分是requireJs,$ .widget部分是特定於magento的部分。
您還需要在requirejs配置文件中添加下面的行以讓知道需要在哪裏找到您的小部件。
var config = {
map: {
'*': {
myWidgetName: 'myVendor_myModule/js/my-widget-name',
}
}
};
最後,我們將包括通過增加休耕代碼模板文件中的小部件:
<script type="text/x-magento-init">
{
"body": {
"myWidgetName": [buttonSelector:'whatever']
}
}
</script>
這似乎太複雜..會嘗試,但選項很快。但現在我將Magento Blank主題中的theme.js複製到了我自己的主題中,並且令人驚訝的是它的工作原理就是這樣。我甚至可以用這種方式使用jQuery。 (我的主題繼承了Magento Blank) – raulicious