不知道我在这里做错了什么,因为此代码在我使用过的其他地方都可以使用,但是...在SharePoint中,有一个客户端控件,有时可能需要一点时间来呈现和在我们可以做些事情之前先走吧。因此,我想出了一个小技巧,可以从根本上检查并查看适当的库是否已加载并可以使用,然后再尝试进行操作。超级简单的东西:
function createSPPeoplePicker(field){
var onPickerInit = function() {
if(SPClientPeoplePicker && SPClientPeoplePicker.SPClientPeoplePickerDict){
var spPP = SPClientPeoplePicker.SPClientPeoplePickerDict[field];
//Now do stuff with the field.
} else {
setTimeout(function() {
onPickerInit();
}, 100);
}
}
onPickerInit();
}
因此,基本上,如果对象SPClientPeoplePicker和SPClientPeoplePicker.SPClientPeoplePickerDict 存在,则可以执行操作。否则,请稍等片刻,然后再次检查。
这在我在环境中构建的许多其他应用程序上已或多或少完美地起作用了,但现在已经有了。我忍不住认为自己正在犯JavaScript错误,而不是SharePoint错误,因为我在检查是否定义SPClientPeoplePicker时,对我大吼大叫:未定义SPClientPeoplePicker。是undefined不再读为“ false”吗?我想念其他愚蠢的东西吗?
感谢您的时间,伙计以及您与一个进取的坏开发者打交道的耐心。
答案 0 :(得分:0)
回答我自己的问题。我猜想,在我所说的这一点上,甚至没有声明变量(这要归功于对问题的评论,使我朝着正确的方向前进。)
更改为:
function createSPPeoplePicker(field){
var onPickerInit = function() {
if(typeof SPClientPeoplePicker !== "undefined" && SPClientPeoplePicker.SPClientPeoplePickerDict !== "undefined"){
var spPP = SPClientPeoplePicker.SPClientPeoplePickerDict[field];
//Now do stuff with the field.
} else {
setTimeout(function() {
onPickerInit();
}, 100);
}
}
onPickerInit();
}
现在我们很好。谢谢大家。