2012-03-27 3 views
1

私がSSJSの機能を持っていて、1つの「しっかりした」パラメータと変更可能な他のパラメータのリストを渡したい場合は、それを行う最善の方法は何ですか?何らかのhashMapやJSONなどを使用していますか?基本的機能は、ドキュメントを作成します{ //ここに可変パラメータをXPages SSJS関数に渡すにはどうすればいいですか?

をものを行う}

のMyFunction(??コード:::文字列、paramList)例えば

は次のように与えられました。そして時には私はすぐに渡したいと思う特定のフィールドを持っていきます、そして、私は人口を増やしたいと思う様々なフィールドを持っています。

どのようにそれらを渡して、関数内で解析しますか?

ありがとうございます!

答えて

5

使用argumentsパラメータ... JavaScriptではあなたは、機能ブロック自体にあなたのパラメータのいずれかを定義する必要はありません。したがって、たとえば、次の呼び出し:

myFunction(arg1, arg2, arg3, arg4); 

は、法的に次の関数に渡すことができます:私はこれを行うとき

myFunction() { 
    // do stuff here... 
} 

、私は通常、私は期待してい示すために、括弧内のコメントを置きます変数引数:

myFunction (/* I am expecting variable arguments to be passed here */) { 
    if (arguments.length == 0) { 
    // naughty naughty, you were supposed to send me things... 
    return null; 
    } 

    myExpectedFirstArgument = arguments[0]; 

    // maybe do something here with myExpectedFirstArgument 
    var whatEvah:String = myExpectedFirstArgument + ": " 

    for (i=1;i<arguments.length;i++) { 
    // now do something with the rest of the arguments, one 
    // at a time using arguments[i] 
    whatEvah = whatEvah + " and " + arguments[i]; 
    } 

    // peace. 
    return whatEvah; 
} 
012:

myFunction (/* I am expecting variable arguments to be passed here */) { 
    // do stuff here... 
} 

その後、あなたはこのようなものを引数にアクセスすることができます

Wallah、可変引数。

しかし、あなたの質問のポイントまで、実際には可変引数を送信する必要はなく、実際のJSON(実際にはJavaScriptオブジェクトの文字列解釈)を作成するという面倒もありません。あなたのフィールド名とフィールド値を取得するために連想配列として参照し、実際のオブジェクトを作成して送信します。

var x = {}; 
x.fieldName1 = value1; 
x.fieldName2 = value2; 
// ... etc ... 

そして、今は2つのパラメータを必要とするあなたの機能に:

myFunction(arg1, arg2) { 
    // do whatever with arg1 

    for (name in arg2) { 
    // name is now "fieldName1" or "fieldName2" 
    alert(name + ": " + x[name]); 
    } 

} 

・ホープ、このことができます。

+0

ありがとう、ジェレミー。最初にオブジェクトを作成して渡すのが本当に好きです。他の場所でもこれを使用します。 –

-3

SSJSでは可能ではないと思います。私はあなたが持っている最良の選択肢は、ハッシュマップまたはあなた自身の(java)オブジェクトを渡すことだと思います。私はあなたの関数がそれを処理する方法についていくつかの '構造体'を定義することができるので、カスタムJavaオブジェクトが最も良いオプションになると思います。ハッシュマップは簡単に拡張できますが、たくさんの異なるハッシュマップ構造を作成するコードがたくさんあると簡単ではありません。

+1

javascriptでは可変引数が可能です。 –

+0

javascriptでは:はい、できますが、質問はSSJSに関するものでした。そして答えはjavascriptで与えられました。私はSSJSでこれまでに試してみましたが、うまく動作しませんでした。 –

+0

SSJSとJavaScriptはどちらもECMAScriptに基づいていて、私のために次のように動作します:XPages Code:<?xml version = "1.0" encoding = "UTF-8"? > SSJSコード: fu nput outputMultipleParms(){ \t var出力:文字列= "";\t for(i = 0; i

5

2番目のパラメータとしてJSONオブジェクトを使用します...

nyfunction("somecode", {form:"SomeForm", subject:"Whatever",uname:@UserName()}); 

ハッピーコーディング:

function myfunction(code:String, data) { 
    // do stuff here... 
    var doc:NotesDocument = database.CreateDocument(); 
    if(data) { 
     for (x in data) { 
     doc.replaceItemValue(x, data[x]); 
     } 
    } 
    // do more stuff 
    doc.save(true, false); 
} 

は、その後、あなたは次のように関数を呼び出します。

/Newbs

+1

JSONオブジェクトを実際に「JSONオブジェクト」というわけではなく、そのJavaScriptオブジェクト... JSONは、オブジェクトの文字列表現です。 - 本質的に私とあなたの答えは同じです。 –

+0

ありがとうHenry!これはJeremyの答えと本当に似ています。あなたは彼を打ち負かすが、私は最初にオブジェクトを作成することについて彼が好きだ。それは気に入ったLotusScript TYPEのようです。だから、私は彼を答えとしてマークし、次にあなたに会うときにビールを買うでしょう。誰もが勝つ! :-) –

関連する問題