2

这是场景:

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

4

2 回答 2

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 ;-)

/约翰

于 2013-02-13T11:25:42.110 回答
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 fe:

var ret = getComponent("layoutLeft", obj );
alert( ret.id )
于 2013-02-15T13:06:42.217 回答