如果我在SSJS中有一个功能,并且我想传递一个“公司”参数和一个可以改变的其他参数列表,那么最好的方法是什么?使用某种hashMap或JSON还是别的什么?
例如给出类似的东西:
myfunction(code:string,paramList:??){ //在这里做点什么
}
基本上该功能会创建一个文档。有时我会有某些字段,我会立即传递并填充,有时候我会有不同的字段,我想要填充。
你如何传递它们然后在函数中解析?
谢谢!
答案 0 :(得分: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 :(得分:5)
使用arguments参数...在JavaScript中,您不需要在功能块本身中定义任何参数。因此,例如,以下调用:
myFunction(arg1, arg2, arg3, arg4);
可以合法地传递给以下函数:
myFunction () {
// do stuff here...
}
当我这样做时,我通常在parens中发表评论以表明我期待变量参数:
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]);
}
}
希望这有帮助。
答案 2 :(得分:-3)
我认为SSJS不可能。我认为你最好的选择是传递一个hashmap或你自己的(java)对象。我认为自定义java对象将是最好的选项,因为您可以定义一些关于函数如何处理它的“结构”。一个hashmap可以很容易地扩展,但是如果你有很多代码创建了很多不同的hashmap结构就不容易...