在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