如果我在SSJS中有一個函數,並且想要傳遞一個「公司」參數和其他可以改變的列表,那麼最好的方法是什麼?用某種類型的hashMap或JSON或其他東西?如何將可變參數傳遞給XPages SSJS函數?
例如給出類似:
myfunction的(代碼:字符串,paramList:??){// 做的東西在這裏
}
基本功能將創建一個文檔。有時我會有一些我想立即通過並填充的領域,其他時候我會填寫不同的領域。
你將如何通過它們然後解析出函數?
謝謝!
如果我在SSJS中有一個函數,並且想要傳遞一個「公司」參數和其他可以改變的列表,那麼最好的方法是什麼?用某種類型的hashMap或JSON或其他東西?如何將可變參數傳遞給XPages SSJS函數?
例如給出類似:
myfunction的(代碼:字符串,paramList:??){// 做的東西在這裏
}
基本功能將創建一個文檔。有時我會有一些我想立即通過並填充的領域,其他時候我會填寫不同的領域。
你將如何通過它們然後解析出函數?
謝謝!
使用參數參數...在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]);
}
}
希望這有助於。
我不認爲這是可能的SSJS。我認爲你擁有的最佳選擇是傳遞一個hashmap或你自己的(java)對象。我認爲自定義java對象將是最好的選擇,因爲你可以定義一些關於你的函數如何處理它的「結構」。的hashmap可以很容易地擴展,但如果你有很多的創造了很多不同的HashMap結構的代碼是不容易...
這是可能的,變量參數可能在JavaScript中。 – 2012-03-27 21:52:54
在JavaScript中:是的,你可以,但問題是關於SSJS。給出的答案是在JavaScript中。我之前在SSJS中嘗試了它,但我沒有得到它的工作 – 2012-03-28 19:08:48
SSJS和JavaScript都基於ECMAScript - 以下適用於我:XPage代碼:<?xml version =「1.0」encoding =「UTF-8」? >
我會用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
在我將下面的地址發佈到我的下方之後,更多地閱讀了您的示例 - 我被您拋出了說JSON對象......它不是真正的「JSON對象」,它是一個javascript對象... JSON是對象的字符串表示形式 - - 所以基本上我和你的答案是一樣的。 – 2012-03-27 22:26:09
謝謝亨利!這與Jeremy的回答非常相似。你擊敗了他,但我喜歡他首先創造物體的部分。有點像一個LotusScript類型的感覺。所以我會將他標爲答案,下次見到你時會給你買一瓶啤酒。大家都贏了! :-) – 2012-03-28 00:19:24
謝謝傑里米。我真的很喜歡首先創建對象並將其傳入。現在我將在其他地方使用它。 – 2012-03-28 00:20:08