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 ...
随机推荐
- 【记录】iOS10 点击推送栏的问题
之前做的一个用户点击 推送栏然后处理相应事件是在这里面处理的 - (void)application:(UIApplication *)application didReceiveRemoteNoti ...
- RPC漏洞
DCOM漏洞:利用这个漏洞攻击者只需发送特殊形式的清求到远程计算机上的135端口,轻则会造成拒绝服务攻击,严重的甚至可以让远程攻击者以本地管理员权限执行任何操作. 攻击过程:扫描也可用xscan+DC ...
- tortoiseGit保存用户名和密码
简介:tortoiseGit(乌龟git)图形化了git,我们用起来很方便,但是我们拉取私有项目的时候,每次都要输入用户名和密码很麻烦,这里向大家介绍怎么避免多少输入 试验环境:window10,安装 ...
- 【Yii系列】处理请求
缘起 这一章是Yii系列的第三章,前两章给大伙讲解了Yii2.0的安装与Yii2.0的基本框架及基础概念,传送门: [Yii2.0的安装与调试]:http://www.cnblogs.com/rive ...
- javaWEB与cookie
Cookie1. Http协议与Cookie(了解) * Cookie是HTTP协议制定的!先由服务器保存Cookie到浏览器,再下次浏览器请求服务器时把上一次请求得到Cookie再归还给服务器 ...
- SQL Server 给表和字段添加说明
.添加表说明 EXECUTE sp_addextendedproperty N'MS_Description','表说明',N'user',N'dbo',N'table',N'表名',NULL,NUL ...
- 老李推荐:第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介
老李推荐:第5章1节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 官方简介 在MonkeyRunner的框架中,Monkey是作为一个服务来接受来自Monkey ...
- js正则表达式匹配字符串与优化过程
前言 有时候需要实现对js源文件中的url字符串做拦截预处理,或者前端js语法高亮,或者需要对动态加载的关键源码做混淆保护,在某些步骤实现之前,有一个步骤是需要提炼出所有的合法字符串. 目标:检测源文 ...
- 怎样配置mysql_installer_community_V5.6........_setup的数据库?
直接访问查看如下路径就可以根据方法匹配 http://jingyan.baidu.com/album/c35dbcb0f1b1448916fcbcc7.html
- 常见的Java面试题整理
面试是我们每个人都要经历的事情,大部分人且不止一次,这里给大家总结常见的面试题,让大家在找工作时候能够事半功倍. 1 Switch能否用string做参数? a.在 Java 7 之前, switch ...