Require.js で Stamen タイル マップをロードするモジュールを作成しようとしていますが、Require での最適な使用方法がわかりません。
Stamen マップをまだ見たことがない場合は、Stamen Mapsにサイトがあります。
これは、マップ ビューview.jsのコードです。
define([
'jquery',
'underscore',
'backbone',
'maps',
'text!templates/map/view.html'
], function($, _, Backbone, maps, mapTemplate){
var mapView = Backbone.View.extend({
el: $(".map"),
displayMap: function() {
this.options = {
center: new maps.LatLng(-37.8, 144.9),
zoom: 11,
mapTypeId: google.maps.MapTypeId.ROADMAP,
scrollwheel: false
};
this.render();
},
render: function(){
var compiledTemplate = _.template(mapTemplate);
var $el = $(this.el);
$el.html(compiledTemplate);
this.map = new maps.Map($el.find('.map').get(0), this.options);
}
});
return new mapView;
});
次のモジュールにマップ API をロードしています。
map.js
define(['google!maps/3/sensor=false'], function() {
return google.maps;
});
google.jsの依存関係がある
define(['http://www.google.com/jsapi?key=THE_API_KEY&callback=define'], {
load: function( name, req, load, config ) {
if (config.isBuild) {
onLoad(null);
} else {
var request = name.split('/');
google.load(request[0], request[1], {
callback: load,
language: 'en',
other_params: ((typeof request[2] === 'string')?request[2]:'')
});
}
}
});
問題は、Stamen マップ レイヤーが Google マップ インスタンスを直接編集しているように見えることです。ここで Stamen マップの実装を確認できます: http://maps.stamen.com/js/tile.stamen.js?v1.1.1
google.maps.StamenMapType = function(name) {
//Implementation
}
グローバルな google.maps オブジェクトに依存しているようです。これが問題の原因であると私は信じています。
Stamen プラグインを require.js に適したものにするためにどのように書き直すのが最適なのか、またはその必要がある場合はどうすればよいかわかりません。Google マップと Stamen を Require.js から取り出して通常どおりにロードしない限り (Modernizr で行うように)、Require.js の方法で試してみたいと思います。そんなことあるなら。
アドバイスやヒントをいただければ幸いです。