Войти с помощью github
Форум /

Добрый день.

Ситуация следующая: На форму через сокетное соединение приходит json с данными. Я преобразую его в массив и смотрю что за данные ко мне пришли. Затем в зависимости от того, что пришло идет вызов тех или иных функций. Например в данном случае, я формирую модальное окно и заполняю его данными в функции NewProcessForm(answer['data']), а затем вызываю его с помощью команды modal('show’). Модальное окно я вызываю с помощью фреймворка Bootstrap, а формирую я его согласно БЭМ.

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

.ws.onmessage = function(e) {

    answer = JSON.parse(e.data);
    if (answer["action_name"] == "NewProcessForm") {
        NewProcessForm(answer["data"]);

                setTimeout(function () { 
                    $('#place_modal_form').modal('show'); 
                }, 1000);
    }
}
function NewProcessForm(json_data){

    var jdata = JSON.parse(json_data); 

    modules.require(['BEMHTML', 'i-bem-dom'], (BEMHTML, bemDom) => {
        bemDom.append(bemDom.doc.find('#place_modal_form'), BEMHTML.apply({
            tag: 'div',
            cls: 'modal-dialog l-new-process',
            content: [
                {
                    tag: 'div',
                    cls: 'modal-content',
                    attrs: { 'data-form-name': 'new' },
                    content: [
                        {
                            tag: 'div',
                            cls: 'modal-body',
                            content: [
                                {
                                    tag: 'div',
                                    cls: 'panel panel-primary',
                                    content: [
                                        {
                                            tag: 'div',
                                            cls: 'panel-heading',
                                            content: [
                                                {
                                                    tag: 'button',
                                                    cls: 'close',
                                                    attrs: { type: 'button', 'data-dismiss': 'modal', 'aria-hidden': 'true' },
                                                    content: 'x'
                                                },
                                                {
                                                    tag: 'h3',
                                                    cls: 'panel-title modal-title',
                                                    content: 'Новая задача'
                                                }
                                            ]
                                        },
                                        {
                                            tag: 'div',
                                            cls: 'panel-body',
                                            content: []
                                        },
                                        {
                                            tag: 'div',
                                            cls: 'panel-footer',
                                            content: [
                                                {
                                                    block: 'c-button-submit',
                                                    js: true,
                                                    tag: 'button',
                                                    cls: 'btn btn-primary',
                                                    attrs: { type: 'button' },
                                                    content: [
                                                        {
                                                            elem: 'glyphicon',
                                                            tag: 'span',
                                                            cls: 'glyphicon glyphicon-ok'
                                                        },
                                                        {
                                                            elem: 'text',
                                                            tag: 'span',
                                                            content: 'Создать'
                                                        }
                                                    ] 
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        }));
    });
}