2017-04-04 27 views
0

在我的SharePoint上,有一个网站,其中根据用户选择的JavaScript和CSOM加载了单个列表项。这个列表项在其列表定义中总共定义了约60个属性。通过JS&CSOM更新后,SharePoint listitem属性会丢失

在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

我注意到你context.executeQueryAsync()这可能会导致与listItem对象的值是无效的或脱水的问题,之前调用context.load(listItem)

在你的问题中的代码看起来应该还是在列表项正确设置规定值,虽然可能有一些代码以后(如在onItemAdded功能),这是运行到错误的假设或微妙来自不充分加载的列表项目的数据差异。