0

Мой код - это модуль JS, который подключен к SPA, код которого я не могу контролировать. Этот SPA использует Backbone для динамического загрузки элементов HTML из шаблона. Один из этих элементов - это div, который мне нужен в моем коде. Я ищу его в документе JQuery готов ..Будет ли документ jQuery готов ждать, когда элементы html будут динамически введены через базовую станцию?

$(document).ready(function() { 
    if($("#myDivId")[0] != undefined) { 
     console.debug("Found it"); 
    } else { 
     console.debug("D'OH!"); 
    } 
}); 

Иногда я нахожу, что Див и другое время я не делаю. Это заставляет меня думать, что DOM ready не всегда ждет Backbone. Можете ли вы это подтвердить?

И если это так, то есть ли какие-либо другие обработчики событий, где я могу разместить свой код, где он всегда находит динамически вставленный HTML-код Backbone?

+0

Я думаю, что можно с уверенностью предположить, если вы не находите div иногда, он не ждет его. Я не использую магистраль, но вы можете дать .load выстрел, посмотрите, работает ли это. – Chris

+1

Нет. Документ готов к работе при загрузке DOM, как определено в разметке. Он не ждет завершения загрузки асинхронной JS-библиотеки - ни динамических элементов JS, которые должны быть добавлены из других библиотек. Вы всегда можете написать свой собственный обратный вызов, чтобы загрузить инициализацию jQuery, как только Backbone будет делать свою работу, но это может быть проблематично, если вы пытаетесь сделать какие-либо манипуляции до загрузки динамических элементов. – Korgrue

+0

@ Korgrue, не могли бы вы привести пример кода этого обратного вызова, который может срабатывать после того, как работает базовая линия, и если выполняется базовая линия, все динамические элементы уже должны быть загружены в этой точке? – AbuMariam

ответ

0

Как подтверждено Korgrue и другими, функция jQuery ready не может полагаться на то, чтобы сказать мне, когда Backbone сделан, вставляя материал в DOM, так что, как было предложено Korgrue, мое решение состоит в том, чтобы иметь мою собственную функцию init(), которая приложение Backbone может вызывать, когда его делается добавлением div в DOM. Таким образом, я могу быть уверен, что div, в котором я нуждаюсь, всегда будет там.

0

Чтобы ответить на ваш вопрос: Нет, готовый документ не дождался позвоночника. Я могу это подтвердить.

Есть ли какие-либо другие обработчики событий, где я могу разместить свой код, где он всегда находит динамически вставленный HTML-код?

Да. Если ваше представление создает собственный элемент, сразу после добавления представления в DOM, вы знаете, что оно находится в DOM. Магистраль не делает этого, вы тот, кто добавляет его в DOM, чтобы вы знали, когда вы это делаете.

Если вы просматриваете точки существующего элемента в DOM, ну, этот элемент уже находится в DOM, вы можете делать все, что хотите.

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

+0

, как я уже сказал в моем первоначальном вопросе, мой код - это только модуль, который подключен к приложению Backbone (чей код является чужим). Таким образом, это не мой код, который вставляет div, но ему нужно прочитать div, который добавлен чей-то код. Я просто хотел знать, могу ли я полагаться на документ, готовый сообщить мне, когда это приложение Backbone будет помещено в DOM, но вы подтвердили, что я не могу. Спасибо за это! – AbuMariam