1.在dojo小部件开发过程中,最好把模板文件的根节点设置为position:relative,尽量避免使用position:absolute。如果将模板文件的根节点设置的定位方式为relative,那么模板文件内部需要绝对定位的元素就可以根据小部件根节点定为了,并且整个小部件本身的dom位置也不会有影响;如果将模板文件的根节点设置的定位方式为absolute,那么模板文件内部需要绝对定位的元素可以根据小部件根节点定位,但是整个小部件本身的dom树会受到其定位本身posiiton:absolute的影响,从而导致小部件的位置不对。
2.div本身没有disabled属性,即使设置了disabled属性也是不起作用的。disabled的属性对button起作用。
3.获取select标签当前选中项所显示的文字select.options[select.selectedIndex].text
4.用isNaN函数用于检查其参数是否是非数字值,isNaN() 函数可用于判断其参数是否是 NaN,该值表示一个非法的数字(比如被 0 除后得到的结果)。
如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。正因为如此,isNaN() 函数是必需的。
isNaN("6.3")返回false,isNaN(6.3)也返回false,isNaN(NaN)返回true。需要注意的是isNaN("")返回的是false,也就是说把空字符串也当做数字了,此时可以再结合parseFloat(string)判断,因为parseFloat("")返回的是NaN。
5.判断某个字符串是不是数字
String.prototype.isNumber = function(){ var b = !isNaN(this) && !isNaN(parseFloat(this)); return b; }
6.判断某个字符串是不是表示的整数
String.prototype.isInteger = function(){ var b = false; var isNum = this.isNumber(); if(isNum){ var floatNum = parseFloat(this); var intNum = parseInt(this); if(floatNum == intNum){ b = true; } } return b; };
7.根据graphic数组获取这些graphics的地理范围:esri.graphicsExtent(graphics),这是esri命名空间中的函数,以后要多关注esri命名空间中的几个函数比较实用
8.判断变量是否为某种类型使用if(variable instanceof sometype)的形式,比如if(a instanceof esri.layers.GraphicsLayer)
9.height是dom.style中的属性,而clientHeight直接是dom的属性,因此要通过dom.clientHeight的方式来访问clientHeight
10.Infinity和-Infinity表示数字中的最大最小值,可当常量使用
11.当提交SVN由冲突的时候,先备份本地代码,然后去更新,然后提交,如果不能提交,出现多个文件,那么将第一个文件替换为本地代码,然后标记为已解决,提交
12.不要老是用div进行布局,有时候用table对规则行列布局比较方便
13.通过graphic的toJson方法以及esri.Graphic(json)可以方便的深度复制graphic,复制后连个graphic直接相互独立,互不影响,没有联系
14.可以通过symbol的toJson方法以及symbol命名空间下的esri.symbol.fromJson()方法实现symbol的深度复制,而且具有通用性,很实用
a.老式方法,不推荐使用templatePath:dojo.moduleUrl("iSpring.widgets.setPointSymbol","templates/SetSymbol.html")
b.新方法,推荐templateString:dojo.cache("iSpring.widgets.setPointSymbol","templates/SetSymbol.html")
16.ArcGIS JS API通过layer._map访问layer所存在的map
17.ArcGIS JS API 2.8开发中通过代码动态更改了graphic的symbol,但是没有立即起效,没有及时刷新,只有在平移地图或缩放地图的时候会重新绘制graphic才对更改的符号起作用,解决这一问题的方法是,自定义一个graphicslayer的刷新方法
function refreshLayer(gl){ var graphicsCopy = []; for(var i in gl.graphics){ var g = gl.graphics[i]; var gJson = g.toJson(); var gCopy = new esri.Graphic(gJson); graphicsCopy.push(gCopy); } gl.clear(); for(var i in graphicsCopy){ var g = graphicsCopy[i]; gl.add(g); } }
18.通过declaredClass属性得到字符串形式的类型名,比如layer.renderer.declaredClass得到"esri.renderer.ClassBreaksRenderer"
19.在js开发过程中,尽量多复制正确的代码,减少误输入
20.ArcGIS JS API 2.8中,可以使用renderer对graphicslayer进行渲染,但是如果后来又更改了layer.renderer中的某些属性信息(比如更改了renderer中的symbol的相关信息),对图层中的graphic不会再发生变化,为了使得更改后的renderer起变化,必须要重新new一个renderer,将newRenderer中的相关信息都设置好,然后设置图层原有的renderer为null,然后设置图层的renderer为newRenderer,最后还需要调用上面第17条中自定义的refreshLayer方法,具体代码如下:
function(gl){ var symbol = getRandomPointSymbol(); //必须要重新构建一个新的renderer才起作用 gl.setRenderer(null); var newRender = esri.renderer.SimpleRenderer(symbol); gl.setRenderer(newRender); //一定要调用自己设置的图层刷新方法 refreshLayer(gl); }
21.ArcGIS JS API中可以使用renderer对graphic进行渲染,如果graphic的symbol不为null,那么该graphic就用其自身的symbol进行渲染;如果graphic的symbol为null
,那么该graphic就会按照graphicslayer的renderer进行渲染。graphic自身的symbol的优先级要高于graphicslayer的renderer。