- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我一直在学习客户端对象模型并遇到了方法 executeQueryAsync
.我发现有很多方法可以调用此方法。我发现的一些是这些:
var context = new SP.ClientContext.get_current();
// Option 1
context.executeQueryAsync(
function(sender, args){ },
function(sender, args){ }
);
// Option 2
context.executeQueryAsync(
Function.createDelegate(this, _onSucceed),
Function.createDelegate(this, _onFail)
);
// Option 3
context.executeQueryAsync(
Function.createDelegate(this, this._onSucceed),
Function.createDelegate(this, this._onFail)
);
// Option 4
context.executeQueryAsync(_onSucceed, _onFail);
哪种方式是最佳/首选方式?另外,语句 Function.createDelegate
做了什么? documentation for this function对我来说似乎很神秘。
最佳答案
首先,我要说的是没有“最佳方式”,因为它们的行为都略有不同...其次,我要补充的是,这并不是 SharePoint 或 executeQueryAsync 特定的东西,因为它通常是 JS 的东西。 ..
接下来我们需要了解 executeQueryAsync
需要两个函数作为参数:第一个是 executeQueryAsync
成功时要执行的函数,第二个是如果方法遇到错误。这些函数传递的参数(来自 executeQueryAsync
,而不是来自您的 JS)表示发送对象以及可以包含一些数据的参数对象(args.get_message()
和args.get_stackTrace()
在调用失败的情况下很常见)
在您的“选项 1”示例中,executeQueryAsync
被赋予两个匿名函数,您将无法在任何地方重复使用它们,但如果行为很简单,这可能就足够了。
在选项 2 中,您使用 createDelegate
方法为成功和失败回调提供上下文——这说明 JavaScript 中的范围;如果您需要引用一个只能在调用 executeQueryAsync
的函数中访问的变量,则需要使用这种模式,以便回调中的 this
引用调用 executeQueryAsync
的函数,而不是您现在所在的成功或失败函数。您可以将创建委托(delegate)视为调用其他函数的调用函数,但说“我希望该函数能够看到我能看到的东西,无论它位于代码中的什么位置。这可能看起来有点神秘,但这就是 JavaScript 中的作用域……您可以通过在更高作用域级别引用变量来完全避免这样做的需要(比如在包含调用方法以及成功和成功的函数内部)故障方法)
选项 3 就像选项 2,除了它只是指定 _onSucceed
或 _onFail
函数应该包含在调用对象中
选项 4 与选项 1 类似,只是您为函数命名(并且它们在当前范围内可用)并按名称调用它们。
我通常使用选项 2 或选项 4 之类的东西——但我希望您能看到它实际上仅取决于您尝试构建代码的方式。
编辑:回应关于 Function.createDelagate()
的评论——它似乎只是 ASP.NET 脚本资源中的一个助手;除了调用 apply()
(这是执行此操作的标准 JS 方式 -- see MDN documentation here),它什么都不做。它还可能在 ASP.NET 的某处提供一些向后兼容性,但我不太确定!
这是我的 SP 环境中脚本资源文件中的函数代码:
Function.createDelegate = function(a, b) {
return function() {
return b.apply(a, arguments)
}
};
作为奖励,我在考虑如何使用 executeQueryAsync
并且我意识到我实际上更频繁地使用它,就像选项 1,使用 jQuery 延迟的 promise 模式,如下所示:
function getSPDataAsync(context) {
var deferred = $.Deferred();
context.executeQueryAsync(function(sender, args) {
deferred.resolve(sender, args);
}, function(sender, args) {
deferred.reject(sender, args);
});
return deferred.promise();
}
然后你可以做一些不太像意大利面条的事情,比如:
...
ctx.load(items);
getSPDataAsync(ctx).then(function() {
//do some stuff with the data when the promise resolves
});
以防万一有人关心! :)
关于javascript - 在 SharePoint 中调用 'SP.ClientContext.executeQueryAsync' 的最佳/首选方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24870104/
我正在尝试使用 JSOM 更新 SP.Listitem,以保留另一个用户的 spUser。请参阅下面的代码片段 // Query the picker for user information. $.
虽然我环顾四周但还没有运气 我正在使用 SQL Server。这是整个场景。 我有一个旧的遗留 sp(由于很多依赖关系和其他问题我无法更改)它不返回任何值也不接受任何输出参数,它只是选择一个值作为 C
虽然我环顾四周但还没有运气 我正在使用 SQL Server。这是整个场景。 我有一个旧的遗留 sp(由于很多依赖关系和其他问题我无法更改)它不返回任何值也不接受任何输出参数,它只是选择一个值作为 C
我正在研究使用过程的MIPS代码,但无法理解堆栈(sp)和帧指针(fp)的目的。 例如,我研究的代码如下。它会在您输入的号码之前打印所有号码,例如3. 3,2,1,0,并显示它使用了多少堆栈大小。在此
我已成功创建以下 MySQL SP.. CREATE DEFINER=`root`@`%` PROCEDURE `Common_Proc_Create_NewId` ( TableName VARC
我尝试使用链接的数据库代码中的另一个 SP 执行存储过程(SP),工作顺利,没有错误,但它不会在我的表中插入数据。 这是存储过程的代码 USE [MYDB] GO SET ANSI_NULLS ON
我有一个包含许多存储过程的生产 SQL-Server 数据库(报告)。SP以不同的方式向外界公开 - 一些用户可以直接访问 SP, - 一些通过 WebService 公开 - 而其他的则通过 DCO
我是 SQL DBA 角色的新手。我有一个可能每天运行多次的存储过程 (SP1)。它在 table1 上运行昂贵的 SELECT,可能需要 15 分钟才能完成。我有另一个存储过程 (SP2),它在 t
自从更新了 sp 软件包后,我收到了以前没有收到的警告: 1: In showSRID(uprojargs, format = "PROJ", multiline = "NO") : Disca
问题 我们试图理解为什么通过调用存储过程执行相同的代码与在查询窗口中执行存储过程内容显示出截然不同的执行时间,但返回完全相同的 183 行结果集。 测试1 从 SSMS 执行以下 SP 需要 5 分钟
为什么在0(SP)处传递的值只能在4(SP)处访问?例如,我需要通过 0(SP) 而不是 4(SP) 将数字传递给 printn (因为它在例程中使用)否则它不会起作用。我错过了什么? MOVE #1
在 MySql 存储过程中,我想捕获并记录可能发生的任何错误,然后停止/终止/退出调用存储过程的进程。该进程是另一个存储过程,其上一级或可能上两级,由计划事件执行。 目前我有第一部分,但没有第二部分:
这个问题在这里已经有了答案: scipy.special import issue (1 个回答) 关闭 7 年前。 我想使用 scipy.signal.lti 和 scipy.signal.imp
在制作 LINQ to SQL 和实体的 POC 时,我遇到了一个卡在死胡同里的问题。问题是,我正在使用 LINQ to SP,一切都运行良好,我制作了很酷的编辑、添加和删除方法。然后在我的矿井中点击
我最近开始使用 TST (tst.codeplex.com) 测试存储过程,并发现它非常有用 - 但一个缺点是我们无法隔离依赖项并“模拟”其他 SP/函数调用(就像我们对 C# 所做的那样)对象依赖关
您好,我已经创建了一个每天触发 sp 的 mysql 事件,但它触发 sp 的时间间隔为一天。我创建的事件是: CREATE DEFINER=`root`@`localhost` EVENT `Job
我想知道是否可以在 Sql Server Profiler 中查看其他存储过程正在执行的存储过程,是否可以,如果可以,如何实现? 最佳答案 如果您使用 SP::Starting 事件进行分析,您可以看
我的场景 我正在开发一个数据库,该数据库将包含整个服务器上不同数据库中各种存储过程的许多详细信息。我现在试图收集的信息是“SP 输出什么?” 在搜索中我发现答案就在 OPENROWSET 中。我的初步
在 python 中,我们有包含 sp.linalg.norm、sp.cross 的库 scipy。 C++ boost 库中有没有类似的函数? 最佳答案 好像没有。 但是,OpenCV 有您需要的!
将 scipy 导入 Python 时出现错误。当我写: import scipy as sp x2 = lambda x: x**2 print sp.integrate.quad(x2, 0, 4
我是一名优秀的程序员,十分优秀!