2012-03-27 86 views
1

如果我在SSJS中有一個函數,並且想要傳遞一個「公司」參數和其他可以改變的列表,那麼最好的方法是什麼?用某種類型的hashMap或JSON或其他東西?如何將可變參數傳遞給XPages SSJS函數?

例如給出類似:

myfunction的(代碼:字符串,paramList:??){// 做的東西在這裏

}

基本功能將創建一個文檔。有時我會有一些我想立即通過並填充的領域,其他時候我會填寫不同的領域。

你將如何通過它們然後解析出函數?

謝謝!

回答

5

使用參數參數...在JavaScript中,你不需要定義功能塊本身的任何參數等。因此,舉例來說,下面的調用:

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

瓦拉,可變參數。

但是,更重要的是你的問題,我不認爲你需要實際發送可變參數,也沒有經歷創建實際的JSON(這實際上是一個JavaScript對象的字符串解釋)的麻煩,只是創建和發送,那麼實際的對象引用作爲關聯數組,讓您的字段名和字段值:

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

然後在你的函數,現在只需要兩個參數:

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

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

} 

希望這有助於。

+0

謝謝傑里米。我真的很喜歡首先創建對象並將其傳入。現在我將在其他地方使用它。 – 2012-03-28 00:20:08

-3

我不認爲這是可能的SSJS。我認爲你擁有的最佳選擇是傳遞一個hashmap或你自己的(java)對象。我認爲自定義java對象將是最好的選擇,因爲你可以定義一些關於你的函數如何處理它的「結構」。的hashmap可以很容易地擴展,但如果你有很多的創造了很多不同的HashMap結構的代碼是不容易...

+1

這是可能的,變量參數可能在JavaScript中。 – 2012-03-27 21:52:54

+0

在JavaScript中:是的,你可以,但問題是關於SSJS。給出的答案是在JavaScript中。我之前在SSJS中嘗試了它,但我沒有得到它的工作 – 2012-03-28 19:08:48

+0

SSJS和JavaScript都基於ECMAScript - 以下適用於我:XPage代碼:<?xml version =「1.0」encoding =「UTF-8」? > SSJS代碼: fu nction outputMultipleParms(){ \t var output:string =「」; (i = 0; i 2012-03-28 19:39:02

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對象」,它是一個javascript對象... JSON是對象的字符串表示形式 - - 所以基本上我和你的答案是一樣的。 – 2012-03-27 22:26:09

+0

謝謝亨利!這與Jeremy的回答非常相似。你擊敗了他,但我喜歡他首先創造物體的部分。有點像一個LotusScript類型的感覺。所以我會將他標爲答案,下次見到你時會給你買一瓶啤酒。大家都贏了! :-) – 2012-03-28 00:19:24

相關問題