2012-03-27 3 views
1

SSJS에 함수가 있고 하나의 "회사"매개 변수와 변경할 수있는 다른 매개 변수 목록을 전달하려는 경우이를 수행하는 가장 좋은 방법은 무엇입니까? 어떤 종류의 hashMap 또는 JSON 또는 다른 것을 사용합니까?가변 매개 변수를 XPages SSJS 함수에 전달하는 방법은 무엇입니까?

하여 myFunction :

예를 들어 같은 주어진 (코드 : 문자열, paramList을 : ??) 기본적으로 함수가 문서를 생성합니다

{ // 여기

물건을 할}. 그리고 가끔은 내가 가야 할 특정 분야가있을 것입니다. 그리고 채우기를 원할 다른 분야가있을 것입니다.

어떻게 함수를 전달한 다음 함수에서 구문 분석합니까?

감사합니다.

답변

5

를 사용하여 인수 매개 변수 ... 자바 스크립트에서는 함수 블록 자체에 매개 변수를 정의 할 필요가 없습니다. 따라서, 예를 들어, 다음 호출 :

myFunction(arg1, arg2, arg3, arg4); 

는 법적으로 다음과 같은 함수에 전달 될 수 : 내가 기대하고 표시하기 위해 나는이 작업을 수행 할 때

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

, 나는 보통 괄호에 코멘트를 배치 변수 인수 : 다음

myFunction (/* I am expecting variable arguments to be passed here */) { 
    // 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; 
} 

Wallah, 가변 인수.

그러나 질문의 ​​요점은 실제로 변수 인수를 보내거나 실제 JSON (실제로 자바 스크립트 객체의 문자열 해석)을 만드는 번거 로움을 피할 필요가 없다고 생각합니다. 생성하고 실제 개체가 다음 필드 이름과 필드 값을 얻을 연관 배열로 참조 보내

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

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

} 

희망이 도움이 : 이제 두 개의 매개 변수를 필요로 함수에 다음

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

을 .

+0

Jeremy에게 감사드립니다. 나는 먼저 객체를 생성하고 그것을 전달하는 것을 정말 좋아합니다. 다른 곳에서도이 객체를 사용할 것입니다. –

-3

SSJS에서는 가능하지 않다고 생각합니다. 내가 가진 최선의 옵션은 hashmap 또는 자신의 (java) 객체를 전달하는 것입니다. 나는 당신의 함수가 그것을 처리 할 수있는 방법에 대한 '구조'를 정의 할 수 있기 때문에 사용자 정의 자바 객체가 가장 좋은 옵션이라고 생각한다. 해시 맵은 쉽게 확장 될 수 있지만 많은 해시 맵 구조를 만드는 코드가 많은 경우 쉽지 않습니다.

+1

javascript에서 가변 인수가 가능합니다. –

+0

자바 스크립트에서 : 예, 가능하지만 SSJS에 관한 질문이었습니다. 그리고 주어진 답은 자바 스크립트에있었습니다. SSJS에서 이전에 시도했지만 작동하지 않았습니다. –

+0

SSJS 및 JavaScript는 모두 ECMAScript를 기반으로하며 다음 작업이 가능합니다. XPages Code : "FALSE" SSJS 코드 : fu nction outputMultipleParms() { \t var 출력 : 문자열 = ""; \t for (i = 0; i

5

두 번째 매개 변수로 JSON 객체를 사용하면 ...

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

그런 다음 당신은 함수를 다음과 같이 호출

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

해피 코딩.

/Newbs

+1

아래 예제를 통해 예제를 읽으십시오 - JSON 객체를 말하는 것으로 인해 버려졌습니다. 실제로 "JSON 객체"가 아니라 자바 스크립트 객체입니다 ... JSON은 객체의 문자열 표현입니다. - 근본적으로 내 대답과 당신의 대답은 동일합니다. –

+0

감사합니다 Henry! 이것은 Jeremy의 대답과 정말로 비슷합니다. 당신이 그를 때려 눕히기는하지만 먼저 물건을 만드는 것에 대한 그의 부분이 마음에 듭니다. 마치 LotusScript TYPE과 같습니다. 그래서 나는 그의 대답을 표시하고 다음에 너를 볼 때 맥주를 사줄 것이다. 모두 승리! :-) –

관련 문제