JavaScript if / else оператор не оценивает неопределенную переменную - PullRequest
0 голосов
/ 04 февраля 2020

Не уверен, что я делаю не так здесь, потому что этот код работает в других местах, где я его использовал, но ... в 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, так как я получаю Uncaught Reference Error, выкрикивая мне, что SPClientPeoplePicker не определен, когда я проверяю, определено оно или нет. Undefined больше не читается как "ложь"? Я скучаю по чему-то еще глупому?

Цените ваше время, ребята, и ваше терпение для работы с агрессивно плохим разработчиком.

1 Ответ

0 голосов
/ 04 февраля 2020

Отвечая на мой собственный вопрос. Я предполагаю, что в тот момент, когда я это называю, переменные даже не объявлены (благодаря комментариям к вопросу, указывающим мне правильное направление).

Изменено на:

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();
}

И теперь мы хороши для go. Спасибо, ребята.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...