2

これはシナリオです:

Xpage には、Ajax 呼び出しから入力される 2 つのフィールドがあります。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 では、Xpage でフィールドが持つ実際の ID に変換できるように、スクリプトにフィールド 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 個あり、状況に応じてフィールドは動的に「ロード」されるため、フォームには ajax/json によって入力される 2…n フィールドがあります。

4

2 に答える 2

4

OK、問題は、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" );

次に、別のコンポーネントlayoutLeftfeを検索します。

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