这是情景:
我们在Xpage上有两个字段要从Ajax调用中填充。 Ajax调用的返回是一个json结构。 在旧式Web开发中,我们使用prototype.js:
$H( json ).each(function(pair){
try {
$( pair.key ).value = pair.value
}
catch(err) { }
});
这里假设我们有fieldIDs等于json键。
{
"fieldID1":"value1",
"fieldID2":"value2"
}
Xpages CSJS需要在脚本中显示字段ID占位符,才能转换为字段在Xpage上的实际ID:
$("#{id:fieldID1}").value = json.fieldID1;
$("#{id:fieldID2}").value = json.fieldID2;
如何使用以下内容确定CSJS运行时中的实际字段ID:
$H( json ).each(function(pair){
try {
$("#{id:"+pair.key+"}").value = pair.value
}
catch(err) { }
});
我们的实际表单有+10个字段要填充,并根据情况动态“加载”字段,因此我们在表单上有2 ... n个字段,由ajax / json填充。
答案 0 :(得分:4)
好的,问题是XPage在向浏览器提供时不知道id。它是使用pair.key计算的。 Marky Roden写了几篇非常好的文章,我认为你可以找到适合你的解决方案。参见:
http://xomino.com/2012/01/26/using-jquery-selectors-in-xpages/
和
http://xomino.com/2012/02/02/jquery-selector-function-for-xpages-xidinputtext1/
HTH; - )
/约翰
答案 1 :(得分:1)
以下是来自SSJS的 getComponent()方法的CSJS实现:
/**
* getComponent
*
* CSJS implementation of SSJS's getComponent method
*
* @param serverId ComponentId to search for
* @param fromObj DOM object to start with
* @author Sven Hasselbach
* @version 0.3
*/
function getComponent( serverId, fromObj ){
var found = false;
var obj = fromObj;
var id = "";
while( obj ){
try{
id = obj.id.split(":").pop();
}catch(e){}
if( id == serverId )
return obj;
ret = findComponent( serverId, obj );
if( ret )
return ret;
obj = obj.parentNode;
}
}
/**
* findComponent
*
* searches the component tree for a specific
* server id
*/
function findComponent( searchId, parentNode ){
var obj;
var id = "";
if( parentNode == null )
return;
if( parentNode.hasChildNodes() == false )
return;
for( p in parentNode.childNodes ){
obj = parentNode.childNodes[p];
try{
id = obj.id.split(":").pop();
if( id == searchId )
return obj;
ret = findComponent( searchId, obj );
if( ret )
return ret;
}catch(e){}
}
}
这允许您在组件树中搜索特定的服务器ID。 要使用它,您必须首先定义一个起始组件,因为树从一个节点搜索到顶部。
获取起始节点:
var obj = XSP.getElementById( "view:_id1:layoutMain:callbackMiddle:dataViewAllReportsByStatus:1_sumLink" );
然后搜索另一个组件 layoutLeft f.e。:
var ret = getComponent("layoutLeft", obj );
alert( ret.id )