关于在ArcGIS WebAppBuilder的widget开发中引入EasyUI的一些方法

widget分为两种,一种是弹出式的(点击弹框),一种是一直停留在地图上的,类似于导航条那种widget。前者参考http://blog.csdn.net/liumengcheng/article/details/70177179

下面说一下后者的开发方式

先看效果:


这个就是驻留在屏幕上的widget,跟导航条widget类似。开发方式如下:

首先在框架的index.html中引入EasyUI,这个跟任何普通的项目引入EasyUI都是类似的:


配置config.json,找到驻留屏幕的widget,然后接着往下配置:

{
   "uri":"widgets/XZQList/Widget",
"visible": true,
"position":{"right":18,"top":18,"width":160,"height":30,"relativeTo": "map"},
"version":"2.3",
"id": "widgets_XZQList_Widget_17",
"name":"XZQList"
      }

其实没啥难度,就是参考其他驻留在屏幕上的widget的配置方法

示例中widget的代码结构如下:


Widget.js的代码如下:

define([
        'dojo/_base/declare',
        'dojo/_base/html',
        'dijit/_WidgetsInTemplateMixin',
        'jimu/BaseWidget',
		"dojo/text!./List.html",
        "dojo/dom-construct",
        "dojo/dom-style",
        "dojo/dom-class",
        'dojo/_base/lang',
        "dojo/on",
    ],
    function (declare, html, _WidgetsInTemplateMixin, BaseWidget,ListHTML,
              domConstruct, domStyle, domClass, lang, on) {
        var clazz = declare([BaseWidget], {
            name: 'XZQList',
            //baseClass: 'jimu-widget-BasemapToggle',
            //创建面板
			templateString: ListHTML,
			loadScript:function (url) {
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.src = url;
            document.body.appendChild(script);
            },
            startup: function () {
                this.inherited(arguments);
				mainMap=this.map;
				this.loadScript("widgets/XZQList/code.js");
            },
			
            destroy: function () {
            },

            onOpen: function () {
            },

            onClose: function () {
            }
        });

        clazz.inPanel = false;
        clazz.hasUIFile = false;
        return clazz;
    });


这里面的"dojo/text!./List.html"非常重要,就是把外部的html作为文本引入widget的templateString,这是驻留屏幕式widget的GUI界面开发的核心,其实在infoWindow里面引入EasyUI的界面也是一样的,也是通过dojo/text!这种方式引入的:

代码:

//设置弹框
				    this.map.infoWindow.setContent(this.htmlString);
				    //设置infoWindow的html的后台jQuery代码 
				    this.loadScript("widgets/LYCX/code.js");
					var attributes = result.features[0].attributes;
					console.info(attributes);
					this.map.infoWindow.setTitle("楼宇查询:"+attributes.Name);
                    this.map.infoWindow.resize(615, 570);
					
					this.map.infoWindow.show(mapPoint);



List.html内容很简单:


<div>
 <input id="myXZQComboBox" value="全部地区">  
</div>

code.js如下,跟普通的jQuery,EasyUI开发方式没啥区别:

$(document).ready(
	function (){
	   //初始化下拉列表框
	   $('#myXZQComboBox').combobox({    
		url:null,
		valueField:'id',    
		textField:'text'   
		});  
		var data2=[{"id":1,"text":"全部地区","selected":true},{"id":2,"text":"00001白洋湾"},{"id":3,"text":"00002彩香"},
		{"id":4,"text":"00003石路"},{"id":5,"text":"00004留园"}];  
		$('#myXZQComboBox').combobox('loadData', data2);  
		$("#myXZQComboBox").combobox({
			onChange: function (n,o) {
			var code=$('#myXZQComboBox').combobox('getText').substr(0,5);
			console.info(code);
			var layerDefinitions = [];
			if(code=="全部地区"){
			  layerDefinitions[0] = "1=1";
			}
			else
			{
			 layerDefinitions[0] = "code like '"+code+"%'";
			}
			  var suzhouLayer=mainMap.getLayer("suzhouly_48");
			  suzhouLayer.setLayerDefinitions(layerDefinitions);
			}});
	    gisCode();
	}		
);

function gisCode(){
     require([
      "dojo/dom",
      "dojo/on",
	  "dojo/Deferred",
	  "jimu/WidgetManager",
	  "jimu/LayerInfos/LayerInfos",
      "esri/Color",
      "esri/config",
      "esri/geometry/webMercatorUtils",
      "esri/graphic",
      "esri/geometry/Extent",
      "esri/lang",
      "esri/map",
	  "esri/SpatialReference",
	  "esri/tasks/ProjectParameters",
      "esri/symbols/SimpleFillSymbol",
      "esri/symbols/SimpleLineSymbol",
      "esri/symbols/SimpleMarkerSymbol",
      "dojo/domReady!"
    ],
    function (dom, on,Deferred,WidgetManager,LayerInfos,Color, esriConfig, webMercatorUtils, Graphic,Extent,lang,Map,SpatialReference,ProjectParameters,SimpleFillSymbol, SimpleLineSymbol,
      SimpleMarkerSymbol){
		console.info("gis code");
	}
  )
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值