如何:使用 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());
}

请参阅

概念

创建客户端对象

客户端对象模型准则

数据检索概述

如何:使用 JavaScript 检索列表项

JavaScript 对象模型中的常见编程任务

其他资源

客户端类库

ECMAScript 类库