Здравствуйте!
Не работает скрипт в template.
Например:
{
view: "template",
src: "serverside.html"
}
Возвращаемый serverside.html:
Нормально ли это?
Если да, то как можно загрузить скрипт в возвращаемом результате?
На примере jquery: $("#id").html(result)
P.S.: Помимо скрипта в возвращаемом результате будет еще и другое, поэтому и надо загрузить в template.
Методом небольшого хака удалось таки получить желаемый результат.
Сперва указал template как
Потом в событии onAfterRender заполнил этот элемент результатом из ajax запроса.
Но хотелось бы знать, можно ли добиться этого нативным методом?
Здравствуйте! Ожидается, что в ui.template через src
приходит html для отрисовки, и выполнение внутреннего скрипта там не предусмотрено.
Поэтому Ваше решение верное. Возможно, было бы немного удобнее использовать callback ajax-запроса вместо onAfterRender:
webix.ajax("url", function(text){ /**/ })
т.е. в процессе создания компонента никаких отложенных процедур нет, и гарантировано, что вызов ajax произойдет после отрисовки, так?
Если речь не идёт о загрузке template извне через url или src (оба работают с асинхронным ajax) - да.
Дело в том, что onAfterRender срабатывает практически при любом изменении компонента (самые очевидные - setHTML()
и refresh()
).
Поэтому здесь уместен либо отдельный вызов ajax, либо однократное его использование в onAfterRender через webix.once
:
onAfterRender:webix.once(function(){ })
Чтобы просто избежать зацикливания, следует использовать методы block/unblockEvent()
.