2016-12-22 3 views
0

Этот вопрос касается веб-приложения, построенного с использованием API-интерфейсов API 3.1 ArcGIS. Я пытаюсь добавить dojo, чтобы выбрать заголовок infoWindow. Поле выбора предназначено для заполнения списком идентифицированных результатов. Я пытаюсь два различных способа:Добавление элемента html в infoWindow - API-интерфейс ArcGIS API 3.18

1) Добавление выпадающий декларативно с помощью HTML:

var template = new esri.InfoTemplate(layerName + "<br/><select id="id_select" data-dojo-type="dijit/form/Select"</select>,"<br/> FID : ${FID}"); 

Поле со списком есть, но я не знаю, как получить доступ к выпадающий добавить параметры динамически (через addOptions). Обычно я делаю dijit.byId («id_select»), но учитывая, что он не существует до тех пор, пока он не будет создан ... Я не уверен, как это сделать.

2) Программно Приведенный ниже код отображает информацию о виджетах dijit/form/select (Он отображает: [object HTML TableElement]), но не сам виджет. Удивительно, если это можно исправить с помощью dijitStartup(), но я не могу не понять, как его использовать (в настоящее время мы пытаемся что-то делать по строкам myTemplate.startupDijits (mySelectBox) - не с этими именами переменных). Я попытался с помощью domConstruct как этот example

var identifyTask, identifyParams, idPoint; 
var identifyResults; 

require([ 
    "esri/dijit/Popup", 
    "esri/tasks/IdentifyTask", 
    "esri/tasks/IdentifyParameters", 
    "dijit/form/Select", 
    "dojo/dom-construct", 
    "dojo/promise/all", 
    "dojo/domReady!" 
], function (
    Popup, IdentifyTask, IdentifyParameters, Select, domConstruct, All 
) { 
    var identifySelect; 

    //dojo.connect(window.myMap, "onLoad", mapReady); 
    mapReady(window.myMap); 

    function mapReady(map) { 
    dojo.connect(window.myMap, "onClick", runIdentifies); 
    } 

    function runIdentifies(evt) { 
    identifyResults = []; 
    idPoint = evt.mapPoint; 
    var layers = dojo.map(window.myMap.layerIds, function (layerId) { 
     return window.myMap.getLayer(layerId); 
    }); 
    layers = dojo.filter(layers, function (layer) { 
     if (layer.visibleLayers[0] !== -1) { 
     return layer.getImageUrl && layer.visible 
     } 
    }); //Only dynamic layers have the getImageUrl function. Filter so you only query visible dynamic layers 
    var tasks = dojo.map(layers, function (layer) { 
     return new IdentifyTask(layer.url); 
    }); //map each visible dynamic layer to a new identify task, using the layer url 
    var defTasks = dojo.map(tasks, function (task) { 
     return new dojo.Deferred(); 
    }); //map each identify task to a new dojo.Deferred 
    var params = createIdentifyParams(layers, evt); 

    var promises = []; 

    for (i = 0; i < tasks.length; i++) { 
     promises.push(tasks[i].execute(params[i])); //Execute each task 
    } 

    var allPromises = new All(promises); 
    allPromises.then(function (r) { showIdentifyResults(r, tasks); }); 
    } 

    function showIdentifyResults(r, tasks) { 
    var results = []; 
    var taskUrls = []; 
    var resultNames = []; 


    r = dojo.filter(r, function (result) { 
     return r[0]; 
    }); 
    for (i = 0; i < r.length; i++) { 
     results = results.concat(r[i]); 
     for (j = 0; j < r[i].length; j++) { 
     taskUrls = taskUrls.concat(tasks[i].url); 
     } 
    } 
    results = dojo.map(results, function (result, index) { 
     var feature = result.feature; 
     var layerName = result.layerName; 
     var serviceUrl = taskUrls[index]; 

     resultNames.push({ 
     value: result.layerName, 
     label: result.layerName 
     }); 
     feature.attributes.layerName = result.layerName; 

     var identifiedList = getIdentifiedList(resultNames); 
     console.log(identifiedList); 

     var template = new esri.InfoTemplate(); 
     template.setTitle(identifiedList); 
     feature.setInfoTemplate(template); 

     var resultGeometry = feature.geometry; 
     var resultType = resultGeometry.type; 
     return feature; 
    }); 


    if (results.length === 0) { 
     window.myMap.infoWindow.clearFeatures(); 
    } else { 
     window.myMap.infoWindow.setFeatures(results); 
    } 


    window.myMap.infoWindow.show(idPoint); 

    identifySelect.on('change', function(evt) { 
     var identIndex = identifySelect.get("value"); 
     console.log(identIndex); 
     window.myMap.infoWindow.select(identIndex); 
    }); 

    return results; 
    } 

    function getIdentifiedList(options) { 
    identifySelect = new Select({ 
     name: "identifySelect", 
     id: "id_select", 
     options: options 
    }, domConstruct.create("select")); 
    return identifySelect.domNode; 
    } 

    function createIdentifyParams(layers, evt) { 
    var identifyParamsList = []; 
    identifyParamsList.length = 0; 
    dojo.forEach(layers, function (layer) { 
     var idParams = new esri.tasks.IdentifyParameters(); 
     idParams.width = window.myMap.width; 
     idParams.height = window.myMap.height; 
     idParams.geometry = evt.mapPoint; 
     idParams.mapExtent = window.myMap.extent; 
     idParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_VISIBLE; 
     var visLayers = layer.visibleLayers; 
     if (visLayers !== -1) { 
     var subLayers = []; 
     for (var i = 0; i < layer.layerInfos.length; i++) { 
      if (layer.layerInfos[i].subLayerIds == null) 
      subLayers.push(layer.layerInfos[i].id); 
     } 
     idParams.layerIds = subLayers; 
     } else { 
     idParams.layerIds = []; 
     } 
     idParams.tolerance = 5; 
     idParams.returnGeometry = true; 
     identifyParamsList.push(idParams); 
    }); 
    return identifyParamsList; 
    } 

}); 
+0

вы можете создать скрипку или некоторые работающие образцы ... –

ответ

0

Привет это своего рода старый, но я дам ему выстрелили. Надеюсь, это ответит на ваш вопрос.

Так что если проблема связана с инфо-окном, то вам нужно настроить прослушиватель, когда он будет создан.

on(map.infoWindow, "show", function() { 
      // do something 
}) 

У меня есть скрипка, который показывает, как получить доступ InfoWindow при создании: https://jsfiddle.net/kreza/jpLj5y4h/

Смежные вопросы