将外部变量传递给弹出窗口中的字段:(arcgis-js-api)
pass external variable to a field in popup: (arcgis-js-api)
这是我的代码,我在其中通过一个休息调用在 arcgis-js-api (4.xx) 中设置和调用弹出窗口...问题我有一个外部变量我想在字段中填充 'place' 这个外部变量不是来自同一个 rest 调用,我有这个值,不知道为什么它不在字段中接受它?
var place = 'something cool x';
........
var popuptemp = {
title: "Shake Intensity",
content: [{
type: "fields",
fieldInfos: [{
fieldName: "grid_value",
label: "Grid Value"
},
{
fieldName: "id",
label: "id"
},
{
fieldName: "place",
label: "place"
},
{
fieldName: "ObjectID",
label: "ObjectID"
},
{
fieldName: "url",
label: "Url"
}
]
}]
}
fl = new FeatureLayer({
source: gras,
objectIdField: "ObjectID",
geometryType: "polygon",
fields: [{
name: "ObjectID",
alias: "ObjectID",
type: "oid"
}, {
name: "id",
alias: "id",
type: "string"
}, {
name: place <--------------------- tried just calling the var here with no avail, no errors, just nothing displays
alias: "place",
type: "string"
}, {
name: "url",
alias: "url",
type: "string"
}, {
name: "grid_value",
alias: "grid_value",
type: "double"
}],
renderer: renderer,
popupEnabled: true,
popupTemplate: popuptemp
});
map.add(fl);
您将无法添加字段等外部数据。但是您可以使用函数来定义内容。看看我给你做的这个例子,里面author
是全局值。
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>ArcGIS API for JavaScript Hello World App</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
.disclaimer {
font-size: 14px;
font-style: italic;
color: white;
background-color: black;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.15/esri/css/main.css">
<script src="https://js.arcgis.com/4.15/"></script>
<script>
require([
'esri/Map',
'esri/views/MapView',
'esri/layers/FeatureLayer'
], function (Map, MapView, FeatureLayer) {
let author = 'by @cabesuon';
const map = new Map({
basemap: 'streets-navigation-vector'
});
const view = new MapView({
container: 'viewDiv',
map: map,
zoom: 12,
center: {
latitude: 32.7353,
longitude: -117.1490
}
});
function toGraphic(lon, lat, ObjectID, title, addrs, url) {
return {
geometry: {
type: 'point',
longitude: lon,
latitude: lat
},
attributes: {
ObjectID,
title,
addrs,
url
}
}
}
const graphics = [
toGraphic(
-117.1560632,
32.727482,
1,
'Automotive Museum',
'2080 Pan American Plaza, San Diego, CA 92101, United States',
'http://sdautomuseum.org/'
),
toGraphic(
-117.1763293,
32.7136902,
2,
'USS Midway Museum',
'910 N Harbor Dr, San Diego, CA 92101, United States',
'http://www.midway.org/'
),
toGraphic(
-117.2284536,
32.7641112,
3,
'SeaWorld',
'500 Sea World Dr, San Diego, CA 92109, United States',
'https://seaworld.com/san-diego'
),
toGraphic(
-117.1557741,
32.7360032,
4,
'Zoo',
'2920 Zoo Dr, San Diego, CA 92101, United States',
'https://zoo.sandiegozoo.org/'
)
];
function popupContent (feature) {
const div = document.createElement('div');
div.innerHTML =
`Address: ${feature.graphic.attributes.addrs}<br>` +
`<a href='${feature.graphic.attributes.url}'>${feature.graphic.attributes.url}</a><br><br>` +
`<span class="disclaimer">${author}</span>`;
return div;
}
const layer = new FeatureLayer({
source: graphics,
fields: [
{
name: 'ObjectID',
alias: 'ObjectID',
type: 'oid'
}, {
name: 'title',
alias: 'title',
type: 'string'
}, {
name: 'addrs',
alias: 'addrs',
type: 'string'
}, {
name: 'url',
alias: 'url',
type: 'string'
}
],
objectIDField: ['ObjectID'],
geometryType: 'point',
renderer: {
type: 'simple',
symbol: {
type: 'text',
color: 'red',
text: '\ue61d',
font: {
size: 30,
family: 'CalciteWebCoreIcons'
}
}
},
popupTemplate: {
title: '{title}',
content: popupContent,
outFields: ['*']
}
});
map.add(layer);
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
这是我的代码,我在其中通过一个休息调用在 arcgis-js-api (4.xx) 中设置和调用弹出窗口...问题我有一个外部变量我想在字段中填充 'place' 这个外部变量不是来自同一个 rest 调用,我有这个值,不知道为什么它不在字段中接受它?
var place = 'something cool x';
........
var popuptemp = {
title: "Shake Intensity",
content: [{
type: "fields",
fieldInfos: [{
fieldName: "grid_value",
label: "Grid Value"
},
{
fieldName: "id",
label: "id"
},
{
fieldName: "place",
label: "place"
},
{
fieldName: "ObjectID",
label: "ObjectID"
},
{
fieldName: "url",
label: "Url"
}
]
}]
}
fl = new FeatureLayer({
source: gras,
objectIdField: "ObjectID",
geometryType: "polygon",
fields: [{
name: "ObjectID",
alias: "ObjectID",
type: "oid"
}, {
name: "id",
alias: "id",
type: "string"
}, {
name: place <--------------------- tried just calling the var here with no avail, no errors, just nothing displays
alias: "place",
type: "string"
}, {
name: "url",
alias: "url",
type: "string"
}, {
name: "grid_value",
alias: "grid_value",
type: "double"
}],
renderer: renderer,
popupEnabled: true,
popupTemplate: popuptemp
});
map.add(fl);
您将无法添加字段等外部数据。但是您可以使用函数来定义内容。看看我给你做的这个例子,里面author
是全局值。
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>ArcGIS API for JavaScript Hello World App</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
.disclaimer {
font-size: 14px;
font-style: italic;
color: white;
background-color: black;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.15/esri/css/main.css">
<script src="https://js.arcgis.com/4.15/"></script>
<script>
require([
'esri/Map',
'esri/views/MapView',
'esri/layers/FeatureLayer'
], function (Map, MapView, FeatureLayer) {
let author = 'by @cabesuon';
const map = new Map({
basemap: 'streets-navigation-vector'
});
const view = new MapView({
container: 'viewDiv',
map: map,
zoom: 12,
center: {
latitude: 32.7353,
longitude: -117.1490
}
});
function toGraphic(lon, lat, ObjectID, title, addrs, url) {
return {
geometry: {
type: 'point',
longitude: lon,
latitude: lat
},
attributes: {
ObjectID,
title,
addrs,
url
}
}
}
const graphics = [
toGraphic(
-117.1560632,
32.727482,
1,
'Automotive Museum',
'2080 Pan American Plaza, San Diego, CA 92101, United States',
'http://sdautomuseum.org/'
),
toGraphic(
-117.1763293,
32.7136902,
2,
'USS Midway Museum',
'910 N Harbor Dr, San Diego, CA 92101, United States',
'http://www.midway.org/'
),
toGraphic(
-117.2284536,
32.7641112,
3,
'SeaWorld',
'500 Sea World Dr, San Diego, CA 92109, United States',
'https://seaworld.com/san-diego'
),
toGraphic(
-117.1557741,
32.7360032,
4,
'Zoo',
'2920 Zoo Dr, San Diego, CA 92101, United States',
'https://zoo.sandiegozoo.org/'
)
];
function popupContent (feature) {
const div = document.createElement('div');
div.innerHTML =
`Address: ${feature.graphic.attributes.addrs}<br>` +
`<a href='${feature.graphic.attributes.url}'>${feature.graphic.attributes.url}</a><br><br>` +
`<span class="disclaimer">${author}</span>`;
return div;
}
const layer = new FeatureLayer({
source: graphics,
fields: [
{
name: 'ObjectID',
alias: 'ObjectID',
type: 'oid'
}, {
name: 'title',
alias: 'title',
type: 'string'
}, {
name: 'addrs',
alias: 'addrs',
type: 'string'
}, {
name: 'url',
alias: 'url',
type: 'string'
}
],
objectIDField: ['ObjectID'],
geometryType: 'point',
renderer: {
type: 'simple',
symbol: {
type: 'text',
color: 'red',
text: '\ue61d',
font: {
size: 30,
family: 'CalciteWebCoreIcons'
}
}
},
popupTemplate: {
title: '{title}',
content: popupContent,
outFields: ['*']
}
});
map.add(layer);
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>