这是一个由两部分组成的问题,一直困扰着我好几天。
1)有人可以解释以下示例的工作原理吗?
我在SharePoint中打开表单并在名为CloseCallback的函数中捕获用户的响应。我发现的例子没有表明通过任何参数传递。
options.dialogReturnValueCallback = Function.createDelegate(null, CloseCallback);
然而在我的例子中,CloseCallback被定义为:
function CloseCallback(result, args)
这是如何工作的?如何调用该函数而不将任何内容传递给它?
2)如何将值传递给CloseCallback?我有一个我想传入的ID,所以CloseCallback可以使用它,但我不知道如何获得该值。
这个让我很伤心,我肯定可以使用这个帮助!
答案 0 :(得分:5)
您可以将CloseCallback
定义为
var CloseCallback = function (result, args) {
};
然后当你这样做:
options.dialogReturnValueCallback = Function.createDelegate(null, CloseCallback);
您只为createDelegate
方法提供了对该功能的引用,您实际上并未对其进行调用。
何时:
var a = function () {};
然后
var b = a; // assigns b the value of a, b will refer to the same function.
var c = a(); // c will contain the return value of a
所以当你执行createDelegate(null, CloseCallback)
时,你只传递对你的函数的引用(你做了b = a
的类型)
和createDeleagte
最终会将您的回调称为:
Function.createDelegate = function (someParam, callback) {
/*Do some stuff - maybe async etc.*/
callback.apply(thisArg, args); // here your callback will be called with the appropriate this context, result and the appropriate argument list (result, args)
/*Do some more stuff*/
}
如果您希望有权访问本地id
变量,则应通过创建代理来创建上下文,如:
options.dialogReturnValueCallback =
Function.createDelegate(null, function (result, args){
CloseCallback(id, result, args); // you pass the id reference from the createDelegate (or parent) contexts into CloseCallback
});
在这种情况下,您还应将CloseCallback
的签名修改为:
var CloseCallback = function (id, result, args) {
...
};
答案 1 :(得分:1)
这是如何工作的?如何调用该函数而不将任何内容传递给它?
根据您的问题,它看起来不像您调用该函数;您完成时利用的API将会完成。如果它实际上没有传递任何参数(例如,他们称之为dialogReturnValueCallback()
),那么undefined
将被分配给您的每个参数。
如何将值传递给CloseCallback?我有一个我想传入的ID,所以CloseCallback可以使用它,但我不知道如何获得该值。
这开始混淆了工作流程。听起来好像你可以控制回调的执行时间和方式。如果是这种情况,那么当您从options
对象执行回调时,只需从DOM中注入适当的值(例如options.dialogReturnValueCallback(someValue)
)。