如何:使用 JavaScript 创建、更新和删除列表项
上次修改时间: 2011年6月20日
适用范围: SharePoint Foundation 2010
本文内容
使用 ECMAScript(JavaScript、JScript)创建列表项
使用 JavaScript 更新列表项
使用 JavaScript 删除列表项
通过客户端对象模型对列表项执行创建、更新或删除操作与通过服务器对象模型执行这些操作的方式类似。您可以创建列表项对象,设置其属性,然后更新该对象。若要修改或删除列表项对象,可使用 ListItemCollection 对象的 getById(id) 函数返回该对象,然后对该方法返回的对象设置属性并调用更新,或者调用对象自己的删除方法。与服务器对象模型不同,只有调用 executeQueryAsync(succeededCallback, failedCallback) 才能终止客户端对象模型中的这些操作,从而使所做更改在服务器上生效。
使用 ECMAScript(JavaScript、JScript)创建列表项
若要创建列表项,可以创建一个 ListItemCreationInformation 对象,设置其属性,并将其作为参数传递给 List 对象的 addItem(parameters) 函数。设置此方法返回的列表项对象的属性,然后调用 update() 函数,如以下示例所示。
var siteUrl = '/sites/MySiteCollection';
function createListItem() {
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Announcements');
var itemCreateInfo = new SP.ListItemCreationInformation();
this.oListItem = oList.addItem(itemCreateInfo);
oListItem.set_item('Title', 'My New Item!');
oListItem.set_item('Body', 'Hello World!');
oListItem.update();
clientContext.load(oListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
alert('Item created: ' + oListItem.get_id());
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
由于上面的示例创建了一个标准列表项,因此您不需要设置 ListItemCreationInformation 对象的属性,即可将其传递给 addItem(parameters) 函数。但是,如果代码必须创建新文件夹,则必须将 ListItemCreationInformation 对象的 underlyingObjectType 函数设置为 folder。
使用 JavaScript 更新列表项
若要设置大多数列表项属性,可以使用列索引器进行工作分配,然后调用 update() 函数,以使所做更改在调用 executeQueryAsync(succeededCallback, failedCallback) 时生效。下面的示例设置 Announcements 列表中第三项的标题。
var siteUrl = '/sites/MySiteCollection';
function updateListItem() {
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Announcements');
this.oListItem = oList.getItemById(3);
oListItem.set_item('Title', 'My Updated Title');
oListItem.update();
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
alert('Item updated!');
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
使用 JavaScript 删除列表项
若要删除列表项,请可对该对象调用 deleteObject() 函数。下面的示例使用 getItemById(id) 函数返回列表中的第二项,然后删除该项。
SharePoint Foundation 2010 保留集合中项的整数 ID,即使这些项已被删除。因此,列表中的第二项可能不会将 2 作为其标识符。如果对不存在的项调用 deleteObject() 函数,将返回 ServerException。
var siteUrl = '/sites/MySiteCollection';
function deleteListItem() {
this.itemId = 2;
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Announcements');
this.oListItem = oList.getItemById(itemId);
oListItem.deleteObject();
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
alert('Item deleted: ' + itemId);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
例如,若要检索执行删除操作而产生的新项计数,请包含对 update() 方法的调用以刷新列表。此外,还必须先加载列表对象本身或列表对象的 itemCount 属性,然后才能执行查询。若要检索列表项的开始计数和结束计数,则必须执行两次查询并返回项计数两次,下面显示对上一示例所做的修改。
var siteUrl = '/sites/MySiteCollection';
function deleteListItemDisplayCount() {
this.clientContext = new SP.ClientContext(siteUrl);
this.oList = clientContext.get_web().get_lists().getByTitle('Announcements');
clientContext.load(oList);
clientContext.executeQueryAsync(Function.createDelegate(this, this.deleteItem), Function.createDelegate(this, this.onQueryFailed));
}
function deleteItem() {
this.itemId = 58;
this.startCount = oList.get_itemCount();
this.oListItem = oList.getItemById(itemId);
oListItem.deleteObject();
oList.update();
clientContext.load(oList);
clientContext.executeQueryAsync(Function.createDelegate(this, this.displayCount), Function.createDelegate(this, this.onQueryFailed));
}
function displayCount() {
var endCount = oList.get_itemCount();
var listItemInfo = 'Item deleted: ' + itemId +
'\nStart Count: ' + startCount + ' End Count: ' + endCount;
alert(listItemInfo)
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}