• 情景再现:
     用户点击一个featurelayer的图斑,(属性信息从mysql中获取),同时高亮此地块,点击一下个地块时候,取消高亮。(请忽略跨域造成的图标错误,jetty试了好久不能跨域·······)
   效果如下:

  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()问题小计的更多相关文章

  1. javascript中数组方法小计

    一:数组的常用方法: 1:join(); 将数组转为字符串显示.不输入参数,默认以逗号连接:输入参数,则以参数连接. var arr=[1,2,3]; console.log(arr.join()); ...

  2. arcgis for javascript之ArcGISDynamicMapServiceLayer图层控制的实现

    图层控制是非常多GIS系统里面必须的一个小功能,本文就说说arcgis for javascript下ArcGISDynamicMapServiceLayer图层控制的实现方式.首先看图: 实现效果 ...

  3. 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会出现意想不到的错 ...

  4. 购物车功能:使用jQuery实现购物车全选反选,单选,商品增删,小计等功能

    效果图: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  5. vue 动态合并单元格、并添加小计合计功能

    1.效果图 2.后台返回数据格式(平铺式) 3.后台返回数据后,整理所需要展示的属性存储到(items)数组内 var obj = { "id": curItems[i].id, ...

  6. 关于ArcGis for javascript的使用

    1.引用ArcGis for javascript核心类库的两种方式: 1.1.下载js包,解压缩放入项目中 1.1.1.下载核心类库压缩文件, 下载地址: https://developers.ar ...

  7. SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计

    表结构: CREATE TABLE [dbo].[Students]( ,) NOT NULL, ) NULL, [Sex] [int] NOT NULL, ) NULL, ) NULL, , ) N ...

  8. PB gird类型数据窗口 设置分组、分组小计、合计

    今天遇到一个需求,gird表格数据如下:  部门  类型 数据   A  类型1  1  A  类型2  2  B  类型1  3  B  类型2  4   合计 10 实际需要显示的结果为:  部门 ...

  9. 简单的angular购物车商品小计

    <!DOCTYPE html> <html lang="en" ng-app="shopApp"> <head> <m ...

随机推荐

  1. 【记录】iOS10 点击推送栏的问题

    之前做的一个用户点击 推送栏然后处理相应事件是在这里面处理的 - (void)application:(UIApplication *)application didReceiveRemoteNoti ...

  2. RPC漏洞

    DCOM漏洞:利用这个漏洞攻击者只需发送特殊形式的清求到远程计算机上的135端口,轻则会造成拒绝服务攻击,严重的甚至可以让远程攻击者以本地管理员权限执行任何操作. 攻击过程:扫描也可用xscan+DC ...

  3. tortoiseGit保存用户名和密码

    简介:tortoiseGit(乌龟git)图形化了git,我们用起来很方便,但是我们拉取私有项目的时候,每次都要输入用户名和密码很麻烦,这里向大家介绍怎么避免多少输入 试验环境:window10,安装 ...

  4. 【Yii系列】处理请求

    缘起 这一章是Yii系列的第三章,前两章给大伙讲解了Yii2.0的安装与Yii2.0的基本框架及基础概念,传送门: [Yii2.0的安装与调试]:http://www.cnblogs.com/rive ...

  5. javaWEB与cookie

    Cookie1. Http协议与Cookie(了解)  * Cookie是HTTP协议制定的!先由服务器保存Cookie到浏览器,再下次浏览器请求服务器时把上一次请求得到Cookie再归还给服务器  ...

  6. SQL Server 给表和字段添加说明

    .添加表说明 EXECUTE sp_addextendedproperty N'MS_Description','表说明',N'user',N'dbo',N'table',N'表名',NULL,NUL ...

  7. 老李推荐:第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介

    老李推荐:第5章1节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 官方简介   在MonkeyRunner的框架中,Monkey是作为一个服务来接受来自Monkey ...

  8. js正则表达式匹配字符串与优化过程

    前言 有时候需要实现对js源文件中的url字符串做拦截预处理,或者前端js语法高亮,或者需要对动态加载的关键源码做混淆保护,在某些步骤实现之前,有一个步骤是需要提炼出所有的合法字符串. 目标:检测源文 ...

  9. 怎样配置mysql_installer_community_V5.6........_setup的数据库?

    直接访问查看如下路径就可以根据方法匹配 http://jingyan.baidu.com/album/c35dbcb0f1b1448916fcbcc7.html

  10. 常见的Java面试题整理

    面试是我们每个人都要经历的事情,大部分人且不止一次,这里给大家总结常见的面试题,让大家在找工作时候能够事半功倍. 1 Switch能否用string做参数? a.在 Java 7 之前, switch ...