首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在不使用地图的情况下使用JavaScript为ArcGIS popupInfo生成html

在不使用地图的情况下使用JavaScript为ArcGIS popupInfo生成html
EN

Stack Overflow用户
提问于 2018-08-03 11:49:46
回答 1查看 208关注 0票数 2

在HTMLJSAPI4.8中,是否可以使用PopupTemplate、PopupViewModel或类似的工具手动添加图层中的popupInfo以及所需的功能,并生成原始的HTML以供在地图外部使用?

我们有一个应用程序,其中我们使用layer.popupInfo.description并手动填充属性以生成我们的超文本标记语言,但我们希望更进一步,并应用layer.popupInfo.fieldInfos[].format下可用的丰富格式。

也许在JS中的某个地方有一个公开的方法,它允许我们手动将fieldInfos应用于一个属性值,一次一个,以实现结果?

我用拖网搜索了ArcGIS API for JavaScript docs,但没有发现任何明显的东西可以用来完成这个任务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-09 08:08:04

事实证明,esri/widgets/Feature类正是我所需要的。

下面是一些在AngularJS上下文中使用它的示例代码:

代码语言:javascript
复制
function onLayerChanged(layer, esri) {
    var fieldInfos;
    if (layer.popupInfo) {
        fieldInfos = _.map(layer.popupInfo.fieldInfos,
            function (fieldInfo) {
                if (fieldInfo.format && fieldInfo.format.dateFormat) {
                    // Transform any old dateFormat values to new equivalent e.g. "dayShortMonthYear" becomes "day-short-month-year"
                    fieldInfo.format.dateFormat = getDateFormat(fieldInfo.format.dateFormat);
                }

                return fieldInfo;
            });
    }

    _graphic = new esri.Graphic({ // esri/Graphic
        popupTemplate: {
            content: layer.popupInfo ? layer.popupInfo.description : '',
            fieldInfos: fieldInfos
        }
    });
}

function onFeaturesChanged(features, esri) {
    _this.parsedFeatures.length = 0;

    _this.parsedFeatures = _.map(features,
        function (feature) {
            var div = document.createElement('div');

            _graphic.attributes = feature.attributes;

            var featureWidget = new esri.Feature({ // esri/widgets/Feature
                graphic: _graphic,
                container: div
            });
            featureWidget.renderNow();

            return {
                id: feature.uid,
                html: div.outerHTML
            };
        });
}

function getDateFormat(dateFormat) {
    // Swap any older style dateFormats for newer version
    switch (dateFormat) {
        case 'shortDate':
            return 'short-date';
            break;
        case 'shortDateLE':
            return 'short-date-le';
            break;
        case 'longMonthDayYear':
            return 'long-month-day-year';
            break;
        case 'dayShortMonthYear':
            return 'day-short-month-year';
            break;
        case 'longDate':
            return 'long-date';
            break;
        case 'shortDateLongTime':
            return 'short-date-long-time';
            break;
        case 'shortDateLELongTime':
            return 'short-date-le-long-time';
            break;
        case 'shortDateShortTime':
            return 'short-date-short-time';
            break;
        case 'shortDateLEShortTime':
            return 'short-date-le-short-time';
            break;
        case 'shortDateShortTime24':
            return 'short-date-short-time-24';
            break;
        case 'shortDateLEShortTime24':
            return 'short-date-le-short-time-24';
            break;
        case 'shortDateShortTime24':
            return 'short-date-short-time-24';
            break;
        case 'shortDateLEShortTime24':
            return 'short-date-le-short-time-24';
            break;
        case 'longMonthYear':
            return 'long-month-year';
            break;
        case 'shortMonthYear':
            return 'short-month-year';
            break;
        case 'year':
            return 'year';
            break;
        default:
            return dateFormat;
    }
}

在代码示例中,我将为每个特性生成html并将其存储在_this.parsedFeatures中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51665045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档