データベースの値のセットから複数のベースレイヤーをセシウムマップに追加しようとしています。私はjavascriptを反復して追加するだけです。以下は、セシウムの静的コードの例です。Javascript closure:セシウムマップに動的baselayersを追加する方法
var imageryViewModels = [];
imageryViewModels.push(new Cesium.ProviderViewModel({
name : 'Open\u00adStreet\u00adMap',
iconUrl : Cesium.buildModuleUrl('openStreetMap.png'),
tooltip : 'OpenStreetMap (OSM)',
creationFunction : function() {
return Cesium.createOpenStreetMapImageryProvider({
url : 'https://a.tile.openstreetmap.org/'
});
}
}));
imageryViewModels.push(new Cesium.ProviderViewModel({
name : 'Black Marble',
iconUrl : Cesium.buildModuleUrl('blackMarble.png'),
tooltip : 'outlines of civilization',
creationFunction : function() {
return Cesium.createTileMapServiceImageryProvider({
url : 'https://cesiumjs.org/blackmarble',
credit : 'B Observatory',
flipXY : true
});
}
}));
静的な値のセットを使用しています。ここでは難しいところですが、値のセットをループして、ProviderViewModelsを配列にプッシュします。このように -
var imageryViewModels = [];
baseLayers = HashOfValuesFromDatabase;
for(int i=0; i<baseLayers.length; i++{
imageryViewModels.push(new Cesium.ProviderViewModel({
name : baseLayers[i].name,
iconUrl : Cesium.buildModuleUrl(baseLayers[i].iconUrl),
tooltip : baseLayser[i].toolTip,
creationFunction : function() {
return Cesium.createOpenStreetMapImageryProvider({
url : baseLayers[i].url // ***** this value always the last value ****
});
}
}));
}
問題はjavascriptの閉鎖は私に問題を引き起こしていると私のimageryViewModelsの一人一人がbaseLayer.urlオブジェクトの最後の値であるということです。セシウムはこれを関数とする必要があります。これを関数にして、iterated baseLayer.urlの値を取得する方法はありますか?