在我的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
或""
。当我第一次尝试调试这个时,我只是创建了一个项目并保存(正确地,包含所有属性)然后加载并再次保存它而不进行修改但是一些属性丢失了。
其他属性可以正确更新,有时这根本不会发生。
在用户的输入丢失之前,有没有办法确保这种效果不会发生或至少检测到并重新更新数据?
答案 0 :(得分:0)
我注意到您在调用context.load(listItem)
之前不调用context.executeQueryAsync()
,这可能会导致listItem
对象的值过时或脱水。
您的问题中的代码看起来仍应在列表项上正确设置指定的值,尽管稍后可能会有一些代码(例如在onItemAdded
函数中)从错误加载的列表项中遇到错误的假设或细微的数据差异。