我希望这个问题不要太宽泛,但是在这个特定的 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);
});
现在具体问题:
这是什么 require([...], function(args) { } 语法在做什么?我什至不知道怎么读这个。它是一个函数调用吗require.js?方括号里是什么?函数参数是什么?
从其他示例来看,似乎在 require.js 调用中每个包含通常应该有一个函数参数。但是在这里,如果我为 FeatureLayer 添加一个参数,它就不起作用。
“dojo/domReady!” include 在任何示例中似乎都没有相应的参数。这与感叹号有关吗?感叹号是什么意思?
谁能给我指出一个有用的 require.js 引用资料? requirejs.org 网站读起来更像是技术规范而不是用户手册。 ESRI 网站似乎假定您知道如何使用 require。
是的,我一直在谷歌搜索——问题是谷歌不擅长搜索计算机语法问题,因为它去掉了标点符号,而且因为“需要 javascript 语法”之类的东西很糟糕(过于宽泛)搜索词。
最佳答案
require([...], function(args) { } 语法说“加载这个模块列表,一旦它们全部加载,调用此函数将这些模块的返回值作为参数”。方括号中的内容是脚本文件路径数组(减去 .js)或使用 require.config paths section 映射的模块 ID。回调函数的参数对应于数组中的路径/模块,但并非所有模块都会返回有用的值,正如您在下一个问题中注意到的那样...
为 FeatureLayer 添加参数不起作用,因为您不能跳过参数。但请注意,许多模块实际上并不返回打算使用的值。您会在 jQuery 插件中经常看到这种情况,其中模块的加载只是向 jQuery 注册插件,但不会向调用者返回值。我不了解 ESRI,但从代码片段来看,加载 FeatureLayer 似乎只是将 FeatureLayer 添加到 esri.layers 全局对象。
感叹号语法是为plugins保留的.通常,感叹号后面会有其他内容,表示插件将加载的资源,例如text!myTemplate.html,但在 domReady! 的情况下,插件的存在只是作为一种等待 DOM 加载后再调用回调函数的方法,因此无需执行任何操作感叹号。
外部资源的推荐列表对于 StackOverflow 来说是题外话,但我发现这里有一个有助于获得基本概念:http://aaronhardy.com/javascript/javascript-architecture-requirejs-dependency-management/
关于javascript - 有人可以解释这个 require.js 示例中涉及的语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512503/
类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
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
查看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
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我正在阅读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方法
在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a