0

我正在开发一个在谷歌地图上显示标记的自定义控件。我有几个属性,例如 "maptype" 、 "zoom" 等。在 Javascript 中很容易访问它们:我可以#{javascript:compositeData.zoom}用来获取 zoom 属性的值。

现在这是我的问题:我为每个标记使用一组属性。该组的名称是“marker”,一个marker有6个属性:“title”、“layer”、“infotext”、“icon”、“address”和“animation”。

如果我尝试使用

var markers = #{javascript:compositeData.marker}; 

我在萤火虫中遇到错误:

缺失:在属性 id var 标记 = [{layer=2, address=Oldenzaal, animation=DROP, icon=/ogo_notes.png...

一个箭头指向 layer 和 2 之间的第一个 =(我不允许在 stackoverflow 中放入图像)

如果我使用

var markers = #{javascript:'"' + compositeData.marker + '"'};

标记是一个对象,但每个对象都包含一个带有标记所有属性的字符串。

我知道我可以做一些编码来为每个字符串创建一个对象,但如果不是所有属性都需要,这并不容易。如果不需要属性,则它不会出现在字符串中。

我想必须有一种更简单的方法来将每个标记作为一个对象,这样我就可以使用如下代码获取图标的值:

var icon = marker.icon

我怎样才能做到这一点?

4

1 回答 1

0

您可以使用来获取组内compositeData.marker.icon的属性。如果您已为该组选中“允许多个实例”,那么要获取您必须去的属性:iconmarker

compositeData.marker[0].icon
compositeData.marker[1].icon

等等...

2012 年 4 月 26 日更新(纳文)

要将它与客户端 javascript 一起使用,您可以尝试将值放在隐藏的输入字段中,如下所示:

<xp:inputHidden id="hdnIcon">
        <xp:this.defaultValue><![CDATA[#{javascript:var value = new Array();
for (var i=0 ; i<compositeData.marker.length ; i++) {
    value.push(compositeData.marker[i].icon);
}
return @Implode(value, ",");}]]></xp:this.defaultValue>
</xp:inputHidden>

这个隐藏输入字段的值可以通过客户端 javascript 读取,如下所示:

var value = document.getElementById("#{id:hdnIcon}").value.split(",");
for (var i=0 ; i<value.length ; i++) {
    <YOUR CODE>
}

另一种方法是将compositeData.marker其内容转换为 JSON 字符串,然后在其上运行客户端 javascript。

于 2012-04-24T15:08:00.913 回答