如何在CSJS运行时中确定字段ID?

时间:2013-02-13 10:26:40

标签: xpages

这是情景:

我们在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填充。

2 个答案:

答案 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 )