有人可以解释这个require.js示例中涉及的语法吗?

Kla*_*lay 16 javascript requirejs

我希望这个问题不是太广泛,但在这个特殊的require.js/ESRI示例中有很多不熟悉的语法,我希望有人可以向我解释一些问题.

首先,这段代码可以工作(也就是说,它可以完成我期望它做的事情):它创建一个基本地图并添加从地图服务中提取的FeatureLayer.它是ESRI Javascript API页面中的一个示例的精简版本.这是代码:

    var map;
    var featureLayer;

    require(["esri/map", "dojo/domReady!", "esri/layers/FeatureLayer"], function (Map) {
        map = new Map("map", {
            basemap: "topo",
            center: [-100.195, 39.567], // long, lat
            zoom: 4
        });

        featureLayer = new esri.layers.FeatureLayer(
            "http://my-server-url.com/arcgis/rest/services/Projects/MapServer/0",
            {
                mode: esri.layers.FeatureLayer.MODE_ONDEMAND
            }
        );

        map.addLayer(featureLayer);

    });
Run Code Online (Sandbox Code Playgroud)

现在针对特定问题:

  1. 这是什么要求([...],功能(参数){}语法干什么?我甚至不知道如何读这一点.它是一个函数调用require.js是什么?在方括号中去?什么是函数参数?

  2. 从其他示例来看,看起来通常在require.js调用中每个include应该有一个函数参数.但是在这里,如果我为FeatureLayer添加一个参数,它就不起作用了.

  3. "dojo/domReady!" include似乎在任何示例中都没有相应的参数.这与感叹号有关吗?感叹号是什么意思?

  4. 任何人都可以指向一个有用的require.js参考?requirejs.org网站更像是技术规范,而不是用户手册.ESRI网站似乎假设您知道如何使用require.

是的,我一直在谷歌搜索 - 问题是谷歌不是很擅长搜索计算机语法问题,因为它删除了标点符号,并且因为"需要javascript语法"等类似于蹩脚(过度广泛)的搜索术语.

exp*_*nit 28

  1. require([...], function(args) { }语法是在说"加载模块的这个名单,一旦他们都加载,调用这个函数与模块作为参数的返回值".方括号中的内容是脚本文件路径(减去.js)或使用require.config路径部分映射的模块ID的数组.回调函数的参数对应于数组中的路径/模块,但并非所有模块都返回有用的值,正如您在下一个问题中所注意到的那样...

  2. 为FeatureLayer添加参数不起作用,因为您无法跳过参数.但请注意,许多模块实际上并未返回要使用的值.你会看到很多jQuery插件,其中模块的加载只是用jQuery注册插件但不向调用者返回值.我不知道ESRI,但是从代码片段看起来加载FeatureLayer只是将FeatureLayer添加到esri.layers全局对象.

  3. 感叹号语法是为插件保留的.通常在感叹号之后会有其他内容指示插件将加载的资源,例如text!myTemplate.html,但是在domReady!插件存在的情况下,只是在调用回调函数之前等待DOM加载的方式,因此无需遵循感叹号.

  4. 外部资源的推荐列表对于StackOverflow来说是偏离主题的,但是我发现这是一个有助于获取基本概念的内容:http://aaronhardy.com/javascript/javascript-architecture-requirejs-dependency-management/

  • 完善!谢谢.我感谢你花时间如此彻底地回答. (2认同)