首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery MapSvg绑定数据到区域参数

jQuery MapSvg绑定数据到区域参数
EN

Stack Overflow用户
提问于 2014-11-16 22:06:36
回答 2查看 1.4K关注 0票数 0

在我的MVC应用程序中,我试图使用来自数据库的数据创建SVG地图。使用jQuery,我在控制器中调用一个操作,该操作以MapSvg区域参数中所期望的格式返回数据。

预期的格式如下:

代码语言:javascript
复制
regions :       {
              'Yemen': {disabled: true},
              'USA':   {tooltip: 'USA: Click to go to Google.com', attr: {fill: '#ff0000', href: 'http://google.com', 'cursor': 'help'}}},
              'France': {tooltip: 'This is France!', attr: {'cursor': 'help'}},
              'Kazakhstan': {tooltip: 'Kazakhstan  - the ninth largest country in the world.'}
            },

在我的控制器中,有一个操作将由jQuery ajax请求在视图中调用。

代码语言:javascript
复制
    public ActionResult GetCountries()
    {           
            List<ScratchMap> allitems = this.Worker.GetAllItems();
            var allItemsAsArray = allitems.Select(x => string.Format("'{0}': {{ tooltip: 'Test', attr: {{ fill: '{1}' }} }}", x.PluginCountryName, x.Color)).ToArray();
            return Json(allItemsAsArray, JsonRequestBehavior.AllowGet);

    }

在视图中,在加载jQuery插件和MapSvg插件之后执行以下代码:

代码语言:javascript
复制
$.get('/ScratchMap/GetCountries', {},
        function (data) {           
            var regionsData = '{' + data + '}';         

            $('#map').mapSvg(
                {
                    source: '@Url.Content("~/Content/Maps/world_high.svg")',
                    loadingText: 'Loading map...',
                    tooltipsMode: 'names',
                    responsive: true,
                    zoom: true,
                    pan: true,
                    zoomButtons: {
                        'show': true,
                        'location': 'right'
                    },
                    regions: regionsData                            
                });
        }), 'json';

当呈现页面时,地图不会填充从数据库检索到的任何国家。但是,当我将regionsData变量的输出直接复制并分配给regions参数时,映射将正确加载所有内容。

下面的文章告诉我,这可能与输入数据类型有关。但是,如果我将regionsData解析为JSON,它会告诉我它的格式是错误的。但是MapSvg的创建者给出的例子也是错误的格式。

有谁有解决办法的办法吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-03 09:59:20

事实证明,这与我创建javascript输出的方式有关。这个问题的答案可以在这个文章中找到。

票数 0
EN

Stack Overflow用户

发布于 2015-10-03 00:24:36

问题是,即使编辑了regions变量,地图插件也不会观察其对象内容的变化,所以您必须等到数据返回后再绘制内容。或者用下面的方法重新绘制。

如果您希望等到从数据库调用返回数据时再进行绘图,您可以使用允诺来延迟对象的绘图。同样重要的是要知道OPTS变量需要的格式,这里是一个示例。

var OPTS ={ 源:源代码,//路径到SVG地图颜色:{背景:'#fff',基:‘#0066 fff’,笔画:'#fff',被选中: 10,禁用:'#ff0000'},tooltipsMode:‘组合式’,缩放:真,pan:真,响应:真,宽度: 1170,zoomLimit: 0,100,onClick:函数(e,m) {//在每个地图上点击}区域:{id_of_svg_path(要为其添加数据的实际区域):{禁用:true,/*or您需要的任何东西*/工具提示:‘某事’}}

为了重新绘制图,我使用了return对象:

选项只是你的特定图表选项。

包含区域变量的变量javascript对象。

变量chartObj = $('#chart_container').mapSvg(OPTS);

chartObj.destroy();

这个呼叫会破坏,然后你用你通过的选项重新绘制它。

一旦你销毁了它并传入新的数据,你就可以直接调用它了。

变量chartObj = $('#chart_container').mapSvg(OPTS);

用新的数据重新绘制它。

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

https://stackoverflow.com/questions/26962600

复制
相关文章

相似问题

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