Mapbox.js -不能初始化map,除非它在全局作用域中可用
mapbox.js - can't initialize map unless it is available in global scope
我试图在我设置的模块模式javascript
项目中使用mapbox
。当我使所有变量都可以访问全局作用域时,在原型中工作的相同代码在我尝试在模块模式中初始化mapbox
时不起作用。换句话说,在我有这个之前:
<html>
<head>
<script="js/mapbox.js"></script>
</head>
<body>
<div id="map"></div>
<script>
L.mapbox.accessToken = '[access_token]';
var map = L.mapbox.map('map','heaversm.b8aa0d0a')
</script>
</body>
</html>
工作。现在我得到的是:
<html>
<head>
<script="js/mapbox.js"></script>
</head>
<body>
<div id="map"></div>
<script src="js/main.js></script>
<script="js/map.js"></script>
</body>
</html>
//main.js:
var synBio = {};
var synBioModule;
synBio.main = function() {
self.mapModule = new synBio.map();
self.mapModule.init();
}
$(document).ready(function(){
synBioModule= new synBio.main();
synBioModule.init();
});
//map.js
synBio.map = function(){
L.mapbox.accessToken = '[access_token]';
var self = this;
var map;
self.init = function(){
map = L.mapbox.map('map','heaversm.b8aa0d0a')
}
}
但是当我这样做的时候,我得到一个404错误,当我试图加载瓷砖:
http://a.tiles.mapbox.com/v4/heaversm.ac964855.json?access_token=[access_token]
一切似乎都在按正确的顺序加载,所以我不知道出了什么问题。在初始化地图之前,我尝试为tile层做一个onready
事件:
mapTiles = L.mapbox.tileLayer('heaversm.ac964855').on('ready',initializeMap);
var initializeMap = function(){
map = L.mapbox.map('map','heaversm.b8aa0d0a')
}
你知道我需要做什么才能让它再次工作吗?
首先,你的代码有几个地方是错误的:<script="js/map.js"></script>
应该是<script src="js/map.js"></script>
。它应该给你:
Uncaught ReferenceError: L is not defined
接下来,你在你的onready事件处理程序中调用synBioModule
的init
方法,但synbioModule
是一个实例synBio.main
,它没有init
方法。这应该显示为:
Uncaught TypeError: synBioModule。Init不是一个函数
我猜他们只是打字错误或c/p错误张贴在这里的代码,因为他们不符合你得到的错误。我已经在以下示例中纠正了这些错误:http://plnkr.co/edit/Or8fLh?p=preview使用我自己的公共令牌加上项目id和您的代码只是工作™。
当我使用无效的项目id时,我得到以下错误:
GET http://a.tiles.mapbox.com/v4/INVALID_PROJECT_ID?access_token=VALID_PUBLIC_TOKEN 404 (Not Found)
无法在http://a.tiles.mapbox.com/v4/INVALID_PROJECT_ID.json?access_token=VALID_PUBLIC_TOKEN加载TileJSON
您必须使用无效的项目id。
- Javascript-在全局作用域中调用本地函数/属性
- javascript中的全局作用域和本地作用域
- FireFox-在全局作用域中由id名称引用的元素.使用w3c标准
- 在全局作用域中定义的具有相同名称的变量
- javascript变量变量名和全局作用域(pinesnotify)
- 变量:本地作用域、全局作用域还是 JavaScript 引擎
- 为什么全局作用域中的变量被分配给窗口对象
- 全局作用域中的var someVariable和JavaScript中的window[“someVariable”]之间
- Javascript eval() for Json 字符串注入了全局作用域函数
- 如何将全局作用域变量引用到局部作用域中
- 为什么在iframe中注入的JavaScript使用父窗口作为其全局作用域
- Javascript:从类内部创建全局作用域函数
- Javascript:过滤已附加到全局作用域的变量
- 在全局作用域上调用Object.prototype方法
- 为什么JavaScript中的子对象会失去全局作用域
- 如果目标是避免污染全局作用域,为什么不让更多的人随机化他们的全局命名空间对象呢?
- 如何从全局作用域访问函数中的变量?
- 为什么在代码示例中' this '不是指向js全局作用域
- 全局作用域映射的Javascript方法
- 添加到全局作用域的函数变量