所以我们有一段代码设置了一些元素来显示各种列表中所有项目的数量。
现在添加了一项要求,即只能计算某种内容类型的项目。但是,如下所示包括caml查询(旧代码已被注释掉)使得它实际使用的速度很慢。 (显然,它只是为了得到一个数字而取出了数千件物品。)
有没有办法使用不请求每个列表中所有项目的javascript计算sharepoint列表中contenttype的所有项目?
function setCounter() {
context = new SP.ClientContext.get_current();
web = this.context.get_web();
this.lists = web.get_lists();
context.load(this.lists);
context.executeQueryAsync(
Function.createDelegate(this, function () {
var listsEnumerator = this.lists.getEnumerator();
while (listsEnumerator.moveNext()) {
var currentItem = listsEnumerator.get_current();
for (var i = 0; i < leng; i++) {
if (leng == 1) ele = listItemCount;
else ele = listItemCount[i];
if (decoded == currentItem.get_title()) {
ele.parentNode.setAttribute("class", "overview_discussions");
// var counter = currentItem.getItems();
// ele.innerText = currentItem.get_itemCount();
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml("<Where><BeginsWith><FieldRef Name='ContentTypeName'/><Value Type='Text'>Discussion</Value></BeginsWith></Where>");
var counter = currentItem.getItems(camlQuery);
context.load(counter);
context.executeQueryAsync(function () { ele.innerText = counter.get_count(); }, executeOnFailure);
break;
}
}
}
}),
Function.createDelegate(this, executeOnFailure));
}
答案 0 :(得分:1)
不,但您可以做的是通过设置视野来最小化数据拉动。现在就像你正在做一个select *当你只需要选择id
var caml = "<View><ViewFields><FieldRef Name='Id'/></ViewFields></View><Query>your query here</Query>";
执行查询后,您只需要像现在一样调用get_count()
如果您熟悉jQuery,我建议您查看一下这个库,它非常易于使用并帮助您改进对象客户端模型的工作。 http://spservices.codeplex.com/