(我改变标题以更准确地解决当前问题)
我正在尝试将人员添加到客户端peoplepicker的分配中,问题是为了添加它们,我需要该人的id,而我不知道如何在$ scope中获取此ID宾语。
这是获取信息和个人身份的代码:
function getUserInfo() {
// Get the people picker object from the page.
var peoplePicker = this.SPClientPeoplePicker.SPClientPeoplePickerDict.peoplePickerDiv_TopSpan;
// Get information about all users.
var users = peoplePicker.GetAllUserInfo();
var userInfo = '';
for (var i = 0; i < users.length; i++) {
var user = users[i];
for (var userProperty in user) {
userInfo += userProperty + ': ' + user[userProperty] + '<br>';
}
}
$('#resolvedUsers').html(userInfo);
// Get user keys.
var keys = peoplePicker.GetAllUserKeys();
$('#userKeys').html(keys);
// Get the first user's ID by using the login name.
getUserId(users[0].Key);
}
// Get the user ID.
function getUserId(loginName) {
var context = new SP.ClientContext.get_current();
this.user = context.get_web().ensureUser(loginName);
context.load(this.user);
context.executeQueryAsync(
Function.createDelegate(null, ensureUserSuccess),
Function.createDelegate(null, onFail)
);
}
function ensureUserSuccess() {
$('#userId').html(this.user.get_id());
}
function onFail(sender, args) {
alert('Query failed. Error: ' + args.get_message());
}
我的问题是我不知道'getUserId'函数内部发生了什么,我怎么能用这个函数来获取$ scope对象里面一个人的id,这样我以后就可以发送它了有关SharePoint列表的其他信息?
这是来自https://msdn.microsoft.com/en-us/library/office/jj713593.aspx
的示例我研究过使用服务,我遇到了同样的问题,区别在于,现在我知道问题是什么。但是,假设我不使用服务,如果我只使用变量,那么我就像这样启动变量:
var userId;
然后在'ensureUserSuccess()'函数内部执行:
userId = this.user.get_id();
最后,在我的$ onSave函数中,我将$ scope.user.id设置为userId变量。 (onSave函数用于将此项目保存到SharePoint列表)
这是我第二次尝试保存项目时,第一次执行此操作时,userId变量未定义,但如果我尝试再次保存它,则不是。在我的onSave函数中,我有这个:
getUserInfo();
$scope.user.id = userId;
在我的脑海中,我喜欢在将$ scope.user.id设置为userId变量之前完成'getUserInfo'功能,但现在我坚信这就是问题所在,我该怎么办?设置user.id直到该功能完成?