我有一个组合框,其值为10,20,30,40,50,当我创建文档并在视图中显示它出现的数字但我想显示其标签(标签是文本)而不是数字。 有人可以帮我找出如何解决这个问题。 感谢
答案 0 :(得分:2)
我倾向于将给定复选框的值添加到资源包中,然后从xp:selectItems和xp:viewColumn值访问该资源包。
首先,我将创建一个资源包,我将其设置为" label",其中包含以下值:
itemsList_status=Draft|0,Published|1,Archived|-1
itemsList_delimiter=,
以下是xp的一个示例:xp:selectobtem:
<xp:selectItems>
<xp:this.value>
<![CDATA[#{javascript:return getSelectItems('status');}]
</xp:this.value>
</xp:selectItems>
这是我的getSelectItems()SSJS函数:
var getSelectItems : function(key) {
try {
var returnObj = new Array();
var items = null;
switch(key) {
case "status" :
items = @Text(label.itemsList_status).split(label.itemsList_delimiter);
break
}
for( var n=0, l=items.length; n < l; n++) {
returnObj.push(items[n]);
}
return returnObj;
} catch(e) {
print(database.getTitle() + " SSJS Error for getSelectItems()");
print(e.toString());
}
}
运行此函数,它将返回3个读取Draft,Published和Archived的选项,同时分别实际存储0,1和-1。您遇到的问题 - 以及使用这种抽象的存储标签的方法:资源包中的值+ SSJS来解决 - 当您去读取值但实际上想要显示标签时...
这是我的getSelectedValue()函数:
var getSelectedValue : function(key, thisValue) {
try {
var returnObj = new Array();
var items = null;
switch(key) {
case "status" :
items = @Text(label.itemsList_status).split(label.itemsList_delimiter);
break
}
var s = "";
var l = "";
for( var n=0, i=items.length; n < i; n++) {
if(items[n].indexOf("|") == -1) {
s = items[n];
l = items[n];
} else {
s = items[n].split("|").pop();
l = items[n].split("|").shift();
}
if(thisValue == s) {
return l;
}
}
return thisValue;
} catch(e) {
print(database.getTitle() + " SSJS Error for getSelectedValue()");
print(e.toString());
}
}
现在,您传递当前值和所需的label:value Resource Bundle项目句柄,此函数会吐出相关标签。以下是我在xp:viewColumn:
中使用它的方法<xp:viewColumn
id="viewColumn_status">
<xp:this.value><![CDATA[#{javascript:return ""}]]></xp:this.value>
<xp:text
value="#{javascript: return
getSelectedValue('status',thisEntry.getDocument().getItemValueString('status'))}" />
<xp:viewColumnHeader
value="#{label.viewColumnHeader_posts_status}"
id="viewColumnHeader_status">
</xp:viewColumnHeader>
</xp:viewColumn>
......那就是它 - 资源包条目&#34; itemList_status&#34;充当标签:值对的权威主人,因此您只需检查输入建筑物并对其进行解构以标记存储值。
希望这有帮助!
答案 1 :(得分:1)
使用别名类似于正常形式的用法。 为值使用公式项:
return ["- Please select -|", "ten|10", "twenty|20", "thirty|30"];
但请记住,存储的值始终是TEXT而不是数字。