草庐IT

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

coder 2024-05-06 原文

我希望这个问题不要太宽泛,但是在这个特定的 require.js/ESRI 示例中出现了很多不熟悉的语法,我希望有人可以向我解释其中的一些内容。

首先,这段代码有效(也就是说,它做了我期望它做的事情):它创建了一个 basemap 并添加了一个从 map 服务中提取的 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);

    });

现在具体问题:

  1. 这是什么 require([...], function(args) { } 语法在做什么?我什至不知道怎么读这个。它是一个函数调用吗require.js?方括号里是什么?函数参数是什么?

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

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

  4. 谁能给我指出一个有用的 require.js 引用资料? requirejs.org 网站读起来更像是技术规范而不是用户手册。 ESRI 网站似乎假定您知道如何使用 require。

是的,我一直在谷歌搜索——问题是谷歌不擅长搜索计算机语法问题,因为它去掉了标点符号,而且因为“需要 javascript 语法”之类的东西很糟糕(过于宽泛)搜索词。

最佳答案

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

  2. 为 FeatureLayer 添加参数不起作用,因为您不能跳过参数。但请注意,许多模块实际上并不返回打算使用的值。您会在 jQuery 插件中经常看到这种情况,其中模块的加载只是向 jQuery 注册插件,但不会向调用者返回值。我不了解 ESRI,但从代码片段来看,加载 FeatureLayer 似乎只是将 FeatureLayer 添加到 esri.layers 全局对象。

  3. 感叹号语法是为plugins保留的.通常,感叹号后面会有其他内容,表示插件将加载的资源,例如text!myTemplate.html,但在 domReady! 的情况下,插件的存在只是作为一种等待 DOM 加载后再调用回调函数的方法,因此无需执行任何操作感叹号。

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

关于javascript - 有人可以解释这个 require.js 示例中涉及的语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512503/

有关javascript - 有人可以解释这个 require.js 示例中涉及的语法吗?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  5. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  6. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  7. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  8. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  9. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  10. ruby - 覆盖相似的方法,更短的语法 - 2

    在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a

随机推荐