如何从自定义控件的属性组中获取属性作为对象?

时间:2012-04-24 12:48:32

标签: xpages xpages-ssjs

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

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

如果我尝试使用

访问该群组
var markers = #{javascript:compositeData.marker}; 

我在firebug中遇到错误:

  

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

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

如果我使用

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

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

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

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

var icon = marker.icon

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以使用compositeData.marker.icon获取群组icon中的媒体资源marker。如果您已为该组选中“允许多个实例”,那么您需要获取属性:

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

依旧......

2012年4月26日更新(Naveen)

要将它与客户端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。