1

タイプごとにコントロールのコレクションを取得することは可能ですか? ラベル、dojo コントロールはエディット ボックス、コンボ ボックスなどが好きです。一般的に、extlib ダイアログ ボックスから 10 個のラベル コントロールのコレクションを取得したいと考えていました。

手伝ってくれてありがとう。

4

2 に答える 2

3

XPages は JSF 上に構築されているので、そうです。囲んでいる要素 (すべてが必要な場合は xp:view) から始めて、子を見ていきます。クラス名はあなたが探しているものです。サンプル コードについては、OpenNTF の XPages Debug Toolbar プロジェクトを確認してください。

明確にするために: JSF はコントロールをツリーで編成するため、すべてのコントロールを取得するには、残りがなくなるまで getChildren() を再帰的に呼び出す必要があります。Debug Toolbar がこれをすべて行ったので、ソースを入手してください。

探しているコードは、xpDebugToolbar スクリプト ライブラリの getComponentIds() 関数にあります。これは、Tommy Valand が API Inspector のために最初に作成したものです。

于 2012-12-29T02:20:50.320 に答える
1

Here is my code.

var myUtil = {
    myArray : new Array(),

    getComponentIDsByType : function(parentComp, parent, className) {
        /*
        parentComp: getComponent("controlId") or view for all
        parent: null or parent of parentComp
        className: class name of component
        Example of usage:
        wnUtil.getComponentIDsByType(getComponent("tableId"), null, "com.ibm.xsp.OutputLabel");
        wnUtil.getComponentIDsByType(getComponent("tableId"), null, "com.ibm.xsp.extlib.dojo.form.FilteringSelect");
        wnUtil.getComponentIDsByType(view, null, "com.ibm.xsp.extlib.dojo.form.FilteringSelect");       
        */
        var itr = parentComp.getChildren().iterator();
        while(itr.hasNext()) {
            var c:com.ibm.xsp.component.xp.XspScriptCollector = itr.next();
            if(!parent) parent = parentComp;
            var p = parentComp;
            if(p && p.getId() && !p.getId().match(/^_id/i) && !p.getId().match(/^event/i) && !p.getId().match(/^selectItem/i) && !p.getId().match(/^dateTimeHelper/i) && !p.getId().match(/^br/i)) {
                parent = parentComp;
            }
            if(c.getId() && !c.getId().match(/^_id/i) && !c.getId().match(/^event/i) && !c.getId().match(/^selectItem/i) && !c.getId().match(/^dateTimeHelper/i) && !c.getId().match(/^br/i) && !c.getId().match(/^typeAhead/i) && !c.getRendererType().equalsIgnoreCase('com.ibm.xsp.PassThroughTagRenderer')) {
                //d.replaceItemValue("control", c.getId());
                //if(parent) d.replaceItemValue("parent", parent.getId());
                //d.replaceItemValue("type", this.getType(c.getRendererType()));
                if (c.getRendererType() == className) {
                    //print (c.getId() + "<<<>>" + c.getRendererType());
                    // store component id to an array
                    this.myArray.push(c.getId());
                }           
            }
            this.getComponentIDsByType(c, parent, className);
        }
    }   
}

Then you just iterate through the myUtil.myArray

于 2013-01-10T18:41:22.630 に答える