function GetFolders(callback) {
var query = new CamlBuilder().Where().TextField("ContentType").EqualTo("Folder").ToString();
var hostweburl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
var scriptbase = hostweburl + '/_layouts/15/';
$.getScript(scriptbase + 'SP.RequestExecutor.js', function () {
sendRequest(query, function myfunction() {
var listEnumerator = spItems.getEnumerator();
var items = [];
var item;
while (listEnumerator.moveNext()) {
item = listEnumerator.get_current();
items.push({ "title": item.get_item("FileLeafRef"), "lazy": true });;
}
callback(items);
})
});
}
function InitTree() {
$("#tree").fancytree({
lazyLoad: function lazyLoad(event, data) {
var result = [];
$.when(GetFolders(function (items) {
//Items array has 5 items now
result = items;
})).then(data.result = result);
data.result = result;
}
});
}
$(document).ready(function () {
InitTree();
});
GetFolders()是一个从服务器加载项目的函数。它是sharepoint JSOM代码。
当我展开树节点时,“LazyLoad”函数被调用,但它不等待GetFolders()函数从服务器获取项目并分配给结果数组但是它转到$ .when的下一行( ).then()并将data.result分配给结果,这是一个空数组。
我想等待执行GetFolders()函数,然后将data.result分配给包含5个项目的结果数组。
更新 以下代码有效。
function GetFolders(dfd) {
var deferredObject = $.Deferred();
var query = new CamlBuilder().Where().TextField("ContentType").EqualTo("Folder").ToString();
var hostweburl = decodeURIComponent(getQueryStringParameter("SPHostUrl"));
var scriptbase = hostweburl + '/_layouts/15/';
$.getScript(scriptbase + 'SP.RequestExecutor.js', function () {
sendRequest(query, function myfunction() {
var listEnumerator = spItems.getEnumerator();
var item;
var items = [];
while (listEnumerator.moveNext()) {
item = listEnumerator.get_current();
items.push({ "title": item.get_item("FileLeafRef"), "lazy": true });;
}
dfd.resolve(items);
})
});
}
function InitTree() {
$("#tree").fancytree({
lazyLoad: function lazyLoad(event, data) {
data.result = $.Deferred(function (dfd) {
GetFolders(dfd);
});
}
});
}
$(document).ready(function () {
InitTree();
});
答案 0 :(得分:0)
.then()
的参数必须是函数。当承诺得到解决时,它将被调用。
我正在使用延迟加载功能在树控件中加载项目。
function InitTree() {
$("#tree").fancytree({
lazyLoad: function lazyLoad(event, data) {
var result = [];
$.when(GetFolders(function (items) {
//Items array has 5 items now
result = items;
})).then(function() {
data.result = result);
});
}
});
}