我正在使用SharePoint 2013开发和JavaScript进行双重学习。
请参考以下内容。
function GetListFields(listname, viewname, ResultCallBackFunction)
{
var clientContext = new SP.ClientContext.get_current();
var web = clientContext.get_web();
var list = web.get_lists().getByTitle(listname);
if (viewname == "")
{
var view = list.get_views().getByTitle(viewname);
var listFields = view.get_viewFields();
}
else
{
this.listFields = list.get_fields().getByInternalNameOrTitle("Title");
}
clientContext.load(this.listFields);
clientContext.executeQueryAsync(onListFieldsQuerySucceeded, onListFieldsQueryFailed);
function onListFieldsQuerySucceeded()
{
console.log(listFields.get_fields().getByInternalNameOrTitle("Title").get_internalName());
var fldArray = new Array();
var fieldEnumerator = listFields.getEnumerator();
while (fieldEnumerator.moveNext())
{
var oField = fieldEnumerator.get_current();
fldArray.push(oField);
}
ResultCallBackFunction(fldArray);
}
function onListFieldsQueryFailed()
{
alert("Something went wrong. The End is Nigh.");
}
}
目的是调用GetListFields以返回具有列表字段名的数组。这会在“ console.log ....”行中返回错误“无法获取未定义或空引用的属性'get_fields'”。请注意,这是为了调试。
如果我更改函数GetListFields的代码,如下所示:
var clientContext = new SP.ClientContext.get_current();
var web = clientContext.get_web();
var list = web.get_lists().getByTitle(listname);
if (viewname == "")
viewname = "All Items";
var view = list.get_views().getByTitle(viewname);
this.listFields = view.get_viewFields();
我确实得到了一个结果,但是其中包含一个名为“ LinkTitle”的字段,该字段在我的列表中没有,因为我已将其重命名。我想念什么?
除此之外,使用时出现错误
var listFields = ...
通过做固定
this.listFields = ...
但不了解区别。
感谢您的帮助或指点。
最佳答案
我花了一些时间在Sharepoint 2013环境中测试您的代码。
我进行了一些更改,现在可以使用了。
您可以在下面看到生成的脚本。
这是有关结果数组中字段名称的一些重要信息。
Sharepoint返回的视图中的字段名称是内部名称,而不是字段标题。
这就是为什么获得LinkTitle而不是字段的真实标题的原因。
当您在Sharepoint界面中创建字段时,Sharepoint会为该字段创建一个标题以及一个基于标题的内部名称。
例如,如果我创建一个名为“我的测试字段”的字段,Sharepoint会说该字段的标题为“我的测试字段”,内部名称为“ my_x0020_test_x0020_field”。
<script>
function GetListFields(listname, viewname, ResultCallBackFunction)
{
var clientContext = new SP.ClientContext.get_current();
var web = clientContext.get_web();
var list = web.get_lists().getByTitle(listname);
var listFields;
var view;
var defaultViewName = 'All Items';
if (viewname === "")
{
viewname = defaultViewName;
}
view = list.get_views().getByTitle(viewname);
listFields = view.get_viewFields();
clientContext.load(listFields);
clientContext.executeQueryAsync(onListFieldsQuerySucceeded, onListFieldsQueryFailed);
function onListFieldsQuerySucceeded()
{
var fldArray = new Array();
var fieldEnumerator = listFields.getEnumerator();
while (fieldEnumerator.moveNext())
{
var oField = fieldEnumerator.get_current();
fldArray.push(oField);
}
ResultCallBackFunction(fldArray);
}
function onListFieldsQueryFailed()
{
alert("Something went wrong. The End is Nigh.");
}
}
function MyCallBack(fieldArray) {
for (var x=0;x<fieldArray.length;x++) {
console.log(fieldArray[x]);
}
}
</script>
<a id="callGetListFields" href="#" onclick="GetListFields('MyListName','MyViewName', MyCallBack);">Call function GetListFields</a>
希望有帮助!
关于javascript - Sharepoint 2013 Javascript-获取列表字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40282449/