arcgis for javascript 之 clone()问题小计
- 情景再现:

var pgraphic;//被点击的graphic
mapViewInstance.on("click", function (evt) {
gLayer.removeAll();
pgraphic=null;
var data=null;
var screenPoint = {
x: evt.x,
y: evt.y
};
mapViewInstance.hitTest(screenPoint).then(function (response) {
// debugger;
data = response.results[0].graphic.attributes;
pgraphic = response.results[0].graphic;
// console.log("data: " + data);
// console.log("data.FID: " + data.FID);
setGraphicAttrbute(data.FID, pgraphic); // pgraphic.attributes ={
// "Acadimic": "1111",
// "Years": "Pinaceae",
// "UserName": 126
// }
pgraphic.popupTemplate = { // autocasts as new PopupTemplate()
title: "{Name}信息",
content: [{
type: "fields",
fieldInfos: fieldInfoData,
}]
};
var sym = SimpleFillSymbol({
color: "red",
outline: {
color: [128, 128, 128, 0.5],
width: "0.5px"
}
});
pgraphic.symbol=new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASH, new dojo.Color([255, 0, 0]), 3));
gLayer.add(pgraphic); });
});
这样处理后,气泡和信息都能正常显示,但是出现一个奇怪的问题,第二次点击时候,第一次点击所产生的样式,并没有被完全remove掉。。

难道是,gLayer.removeAll() 没起作用?于此同时,各种refresh也不起作用。。。
我又回看了一次代码发现了端倪,
data = response.results[0].graphic.attributes;
pgraphic = response.results[0].graphic;
这里获取的graphic来自featurelayer,只是赋值给一个新变量而已,还是指向了featurelayer中那个graphic。。
pgraphic.symbol=new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASH, new dojo.Color([255, 0, 0]), 3));;
所以,在给pgraphic设置样式的时候,同时也把样式设置到featurelayer上去了。
怎么解决这问题呢?两种解决思路,
1.获得一个全新的pgraphic
2在featurelayer上去除样式,(这个好像不行吧)
突然想起java中的深复制,js不熟悉,我现实不了,翻了翻api看到有 clone这个方法:Creates a deep clone of the graphic object. 这不就是“”深复制么”···
于是修改代码
pgraphic = response.results[0].graphic.clone();
得到一个全新的graphic,再次运行,问题不在啦。。。。。。

setGraphicAttrbute代码如下:
function setGraphicAttrbute(id, pgraphic) {
$.ajax({
type: "POST",
async: false,
url: server_context + "/gisBlock/queryid/" + id,
dataType: "json",
success: function (msg) {
console.log("Data Saved: " + msg.nameId);
var jsonData = "";
if (msg != null) {
pgraphic.attributes = {
"FID":msg.id,
"nameId": msg.nameId,
"academy": msg.academy,
"year": msg.year,
"userName": msg.userName,
"crops": msg.crops,
"area": msg.area,
"month":msg.month,
}
}
else {
pgraphic.attributes = {
"Acadimic": "未查询到相关结果"
}
}
}
});
}
初次学习,有什么不对请指正!
arcgis for javascript 之 clone()问题小计的更多相关文章
- javascript中数组方法小计
一:数组的常用方法: 1:join(); 将数组转为字符串显示.不输入参数,默认以逗号连接:输入参数,则以参数连接. var arr=[1,2,3]; console.log(arr.join()); ...
- arcgis for javascript之ArcGISDynamicMapServiceLayer图层控制的实现
图层控制是非常多GIS系统里面必须的一个小功能,本文就说说arcgis for javascript下ArcGISDynamicMapServiceLayer图层控制的实现方式.首先看图: 实现效果 ...
- arcgis for JavaScript API 4.5与4.3的区别
arcgis 4.5与4.3区别: 鉴于本人使用4.3时间比较久,而arcgis for JavaScript API于9月28日推出了4.5版本,但是直接更换4.5的init.js会出现意想不到的错 ...
- 购物车功能:使用jQuery实现购物车全选反选,单选,商品增删,小计等功能
效果图: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- vue 动态合并单元格、并添加小计合计功能
1.效果图 2.后台返回数据格式(平铺式) 3.后台返回数据后,整理所需要展示的属性存储到(items)数组内 var obj = { "id": curItems[i].id, ...
- 关于ArcGis for javascript的使用
1.引用ArcGis for javascript核心类库的两种方式: 1.1.下载js包,解压缩放入项目中 1.1.1.下载核心类库压缩文件, 下载地址: https://developers.ar ...
- SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计
表结构: CREATE TABLE [dbo].[Students]( ,) NOT NULL, ) NULL, [Sex] [int] NOT NULL, ) NULL, ) NULL, , ) N ...
- PB gird类型数据窗口 设置分组、分组小计、合计
今天遇到一个需求,gird表格数据如下: 部门 类型 数据 A 类型1 1 A 类型2 2 B 类型1 3 B 类型2 4 合计 10 实际需要显示的结果为: 部门 ...
- 简单的angular购物车商品小计
<!DOCTYPE html> <html lang="en" ng-app="shopApp"> <head> <m ...
随机推荐
- C中运算符优先级
总体规则: 特殊运算符>单目运算符>双目运算符>三目运算符>赋值运算符>逗号运算符 只有单目运算符是右结合,其余的均为左结合
- [原创]ASM动态修改JAVA函数之函数字节码初探
ASM是非常强大的JAVA字节码生成和修改工具,具有性能优异.文档齐全.比较易用等优点.官方网站:http://asm.ow2.org/ 要想熟练的使用ASM,需要对java字节码有一定的了解,本文重 ...
- ORACLE 12C 基础
连接到PDB数据库 CMD窗口:sqlplus 用户名/密码@localhost:1521/PDB数据库名 示例:sqlplus xiaozijie/Abc4681101@localhost:1 ...
- [cookie篇]从cookie-parser中间件说起
当我们在写web的时候,难免会要使用到cookie,由于node.js有了express这个web框架,我们就可以方便地去建站.在使用express时,经常会使用到cookie-parser这个插件. ...
- jquery data属性的使用
var func=function(){console.log("test")};$("div").data("test",func);$( ...
- JS——控制标记的样式
1.定义一个div,宽度为100px,高度为100px,背景色为粉色. 定义一个事件,鼠标移入时背景色变为蓝色,宽度变为200px. 定义一个事件,鼠标移出时背景色变为红色. html文件: < ...
- Javascript 闭包访问问题?
function pfajax(paradata){ $.ajax({ data : paradata.dat, type : paradata.method, async: false, url : ...
- WPF之路二: button添加背景图片点击后图片闪烁问题
在为button添加背景图片的时候,点击后发现图片闪烁,我们仔细观察,其实Button不仅仅只是在点击后会闪烁,在其通过点击或按Tab键获得焦点后都会闪烁,而通过点击其他按钮或通过按Tab键让Butt ...
- Java并发编程:volatile 关键字
转自:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 其实Java语言是支持多线程的,为了解决线程并发的问题,在语言内部 ...
- ASP.NET自定义模块
要创建自定义模块,类需要实现IHttpModule接口.这个接口定义了Init和Dispose方法. Init方法在启动Web应用程序时调用,其参数的类型是HttpContext,可以添加应用程序处理 ...