【发布时间】:2014-02-19 18:16:09
【问题描述】:
这里有点笨拙。我有各种暴露 COM 的系统,并且在我的 .net 软件中实现了 Google 地图 (v3)。我现在要做的是,当用户编辑多边形(定义区域)时,我将所有路径点发送回 .net 以存储到我们的数据库中。
我的问题是 .Net 知道我传回的 JS 数组的大小是 X 个元素,但对于我来说,我无法弄清楚如何在遍历数组时引用这些值。
这是我在 JS 中使用 window.external 的 .NET (VB) 方法
Public Sub AreaPointMoved(ByRef obj As Object, ByVal s As String)
MsgBox(s) ' contains a string of lat/lngs from JS
MsgBox(obj.length)
For i As Integer = 0 To obj.length
MsgBox(obj(i).lat & ", " & obj(i).lng) ' this doesn't work
'MsgBox(obj.lat & ", " & obj.lng) ' this doesn't work
Next
End Sub
以及在set_at 事件被触发时发回内容的 JS:
function DrawAreaOverlay(area, col)
{
var coordsString = "";
var areaCoords = [];
overlayLayer[overlayCount] = new Array();
for(var j=0; j<area.Count; j++)
{
areaCoords.push(new google.maps.LatLng(area.Item(j).lng, area.Item(j).lat));
}
var poly = new google.maps.Polygon({
paths: areaCoords,
strokeColor: col,
strokOpacity: 0.35,
strokeWeight: 2,
fillColor: col,
fillOpacity: 0.25,
geodesic: false,
editable: canEdit,
draggable: canDrag,
map: map
});
overlayLayer[overlayCount].push(poly);
poly.getPaths().forEach(function(path, index){
google.maps.event.addListener(path, 'set_at', function(){
var arrayOfPoints = new Array();
var g = new Array();
arrayOfPoints = poly.getPath();
coordsString = "";
for(var i=0; i<arrayOfPoints.length; i++)
{
//simpleArray[i] = poly.getPath().getAt(i).lat() + ", " + poly.getPath().getAt(i).lng();
geoObj = new Object();
geoObj.lat = poly.getPath().getAt(i).lat();
geoObj.lng = poly.getPath().getAt(i).lng();
g.push(geoObj);
coordsString += poly.getPath().getAt(i).lat() + ", " + poly.getPath().getAt(i).lng() + "|";
}
window.external.AreaPointMoved(g, coordsString);
//alert(path.getLength());
});
});
}
我真的很困惑。将对象从 .net 获取到 JS 是一件轻而易举的事。但是我一生都无法弄清楚我做错了什么:(
干杯。
【问题讨论】:
-
如果你在 MsgBox 上放一个断点并检查里面有什么?
-
显示:System.__COMObject - 但不会让我看到任何类型的字段或属性。
-
尝试使用 obj[i] 而不是 obj(i)
-
甚至不编译。 “需要标识符。”使用:obj[0].lat - 我会用字符串解决它。老学校的方式!我只是希望,因为将一个可枚举数组传递给 JS 很简单,所以从 JS 中返回和迭代一个数组会很容易。
-
类似的问答:stackoverflow.com/a/20943173/1768303。代码用 C# 编写,但可以从 VB.NET 使用相同的反射 API。
标签: javascript arrays vb.net google-maps-api-3