У меня есть CustomAction , который добавляет кнопку на ленту. My CommandHandler указывает EnabledScript , который определяет, когда кнопка должна быть включена / отключена. Смотрите ниже:
<CommandUIHandlers>
<CommandUIHandler
Command="CreateSiteGroup"
CommandAction="javascript:CreateCreateSiteGroup();"
EnabledScript="javascript:CreateCreateSiteGroupButtonEnabled();">
</CommandUIHandler>
</CommandUIHandlers>
Функция CreateCreateSiteGroupButtonEnabled () просто должна возвращать true / false, однако мне пришлось использовать внутри нее функцию executeQueryAsync , чтобы я мог загрузить свойства некоторых объекты. Очевидно, поскольку теперь метод выполняется асинхронно, значение true / false никогда не возвращается.
Мой код выглядит так:
function CreateContributorsGroupButtonEnabled() {
this.clientContext = new SP.ClientContext.get_current();
this.web = this.clientContext.get_web();
this.clientContext.load(this.web, "Title");
this.clientContext.executeQueryAsync(Function.createDelegate(this, this.OnContextSucceeded), Function.createDelegate(this, this.OnQueryFailed));
}
function OnContextSucceeded() {
this.siteGroups = web.get_siteGroups();
this.clientContext.load(this.siteGroups);
this.clientContext.executeQueryAsync(Function.createDelegate(this, this.OnQuerySucceeded), Function.createDelegate(this, this.OnQueryFailed));
}
function OnQuerySucceeded() {
var contributorsGroupTitle = String.format("{0} Contributors", web.get_title());
var siteGroupEnumerator = this.siteGroups.getEnumerator();
while (siteGroupEnumerator.moveNext()) {
var siteGroup = siteGroupEnumerator.get_current();
if (siteGroup.get_title().toLowerCase() == contributorsGroupTitle.toLowerCase())
return false;
}
return true;
}
Кто-нибудь знает, как я могу вернуть истину / ложь обратно из асинхронной функции? Или, альтернативно, как я могу узнать, существует ли группа сайтов с определенным именем без , используя executeQueryAsync ?