通过JS&更新后,SharePoint listitem属性会丢失CSOM

时间:2017-04-04 11:27:11

标签: javascript jquery sharepoint csom

在我的SharePoint上,有一个网站,根据用户对JavaScript和CSOM的选择加载单个列表项。此列表项在其列表定义中定义了总共约60个属性。

在HTML输入字段中,用户可以在jQuery将加载的属性填充到相应的输入字段后修改大多数属性。当"保存"按下按钮,通过jQuery从输入中收集属性并将其放入一个简单的JS对象(itemProps):

var itemprops = {
    'foo': $('#foo-input').val(),
    'bar': $('#bar-input').val()
}

然后,调用以下函数:

function updateListItem(itemProps, onItemAdded, onItemError) {
    var list = web.get_lists().getByTitle('ListTitle');
    var listItem = list.getItemById(id);
    for (var propName in itemProps) {
        if (itemProps.hasOwnProperty(propName)) {
            listItem.set_item(propName, itemProps[propName]);
        }
    }
    listItem.update();
    context.executeQueryAsync(
        function() {
            onItemAdded(listItem);
        },
        onItemError
    );
}

调试显示itemProps中的数据有效。但有时(我无法确定地重现这种效果)某些属性会丢失,当我查看SharePoint列表中的列表项时,某些属性为空,就好像itemProps有与该媒体相关联的null""。当我第一次尝试调试这个时,我只是创建了一个项目并保存(正确地,包含所有属性)然后加载并再次保存它而不进行修改但是一些属性丢失了。 其他属性可以正确更新,有时这根本不会发生。

在用户的输入丢失之前,有没有办法确保这种效果不会发生或至少检测到并重新更新数据?

1 个答案:

答案 0 :(得分:0)

我注意到您在调用context.load(listItem)之前调用context.executeQueryAsync(),这可能会导致listItem对象的值过时或脱水。

您的问题中的代码看起来仍应在列表项上正确设置指定的值,尽管稍后可能会有一些代码(例如在onItemAdded函数中)从错误加载的列表项中遇到错误的假设或细微的数据差异。

相关问题