Magento 2在javascript中引入了一些新特性,其中一个是“requireJS”(javascript文件加载器),第二个是“jQuery”,一个非常流行的js库。最大的好处是使用requireJS,这意味着Magento 2已经为即将到来的HTTP2协议做好了准备在接下来的几个步骤中,我们将解释如何创建有效的JavaScript代码以在requireJS中使用,让我们从一个例子开始吧。

首先,我们需要创建一个有效的Magento 2模块,如下面的屏幕截图所示:

您可能会注意到Magento 1和Magento 2之间存在一些差异,因为所有javascript,布局和模板文件现在都属于该模块。此外,我们的javascript文件位于模块的目录路径中:“app/code/Magease/Js/view/frontend/web/js/”。在这个例子中,我们创建了两个js文件:“Magease.js”和“logger.js

看看我们的javascript代码,该代码适用于requireJS环境。

define([
    "jquery",
    "logger",
    "jquery/ui"
], function($, logger) {
    "use strict";
    logger.log('magease.js is loaded!!');
    logger.log(logger);
 
        //creating jquery widget
        $.widget('magease.js', {
            _create: function() {
 
                //options which you can pass from js.phtml file in json format
                logger.log(this.options);
 
                //access to element p#test
                logger.log(this.element);
 
                //for exmple, you can create some click event or something else
                this.element.on('click', function(e){
                    logger.log("You click on element: " + e.target);
                });
            }
 
        });
 
    return $.magease.js;
});

您会注意到顶部的javascript代码使用了“define”函数。

这个函数来自requireJs - “define”函数的第一个参数是依赖数组,第二个参数是我们函数的定义。
定义函数应始终返回一个对象。在我们的示例中,我们的函数返回“$.magease.js”。
您可以在url上阅读有关define function的更多信息:http//requirejs.org/docs/api.html#define

在我们的示例中,我们的javascript使用jQuery,jQueryUI和logger。应在“define”函数中声明所有依赖项。您可以看到我们将下一个数组作为第一个参数:

["jquery", "logger", "jquery/ui"]

在我们的函数定义中,我们创建了jquery小部件,并将所有逻辑放在小部件构造函数“_create”中。JQuery和logger作为下一个参数传递:“$”和“logger”。

我们的记录器类的源代码如下。您可以注意到我们的类不需要任何依赖,并且在“define”函数中,只有定义函数返回对象,如前所述。

define(function() {
    "use strict";
 
    return {
        log : function(param){
            console.log(param);
        }
    };
});

所有文件都应在“requirejs-config.js”文件中声明 - 这是使用requireJs的配置文件。

var config = {
    map: {
        '*': {
            mageasejs:      'Magease_Js/js/magease',
            logger:      'Magease_Js/js/logger'
        }
    }
};

下一步将解释如何加载和使用我们的JavaScript。为了使用/加载我们的javascript,你必须在一些phtml文件中添加以下代码。我们完整的js.phtml文件如下:

测试元素

<script type="text/x-magento-init">// <![CDATA[ { "#test": { "Magease_Js/js/magease": {"url":"http://www.example.url", "method":"post"} } } // ]]></script>

在Magento 2中有一个javascript解析器(位于脚本“lib/web/mage/apply/scripts.js”中),它读取属性type=“text/x-magento-init”的脚本标签,并使用大括号中的“子”json数据加载/处理它们:

"#test": {
            "Magease_Js/js/magease":
                {"url":"http://www.example.url", "method":"post"}
	}

您会注意到“#test”,这是传递给jquery小部件的html元素的id,它可以在我们的脚本中通过“this.element”属性获得。其他元素“url”和“method”也是从json对象传递到我们的小部件的选项,这些选项在js属性“this.options的脚本中可用,可以根据需要定义这些选项。

如果你做了上面所做的一切,javascript应该工作,你应该在html头部有一个脚本标签,如下图所示:

magease