Что такое renderAjax (), чем он отличается от render ()?

когда я использую normal return this->render('create', ['model' => $model]) мое всплывающее окно выходит из строя. Когда я меняю на return $this->renderAjax('create', ['model' => $model]); все волшебным образом на своих местах. Я немного посмотрел вокруг, чтобы прочитать о renderAjax (), но, похоже, там абсолютно ничего нет. Кто-нибудь может сказать мне, что он делает? Я знаю ajax, но из того, что я знаю, он обычно не имеет ничего общего с css или bootstrap.

2 ответов


чтобы узнать разницу между render() и renderAjax() сначала нужно понять, как render() строительство.

в основном, когда render() вызывается каждый кусок кода JS и CSS, а ссылки на файлы, зарегистрированные в представлении, собираются в несколько массивов для последующего отображения в соответствующих местах - эти места хранятся в макете, и их код отображается вызовом beginPage(), head(), beginBody(), endBody() и endPage().

вы можете указать, где код JS должен отображаться путем установки второго параметра в связанных методах-например, например:

$this->registerJs("alert()", \yii\web\View::POS_HEAD);

оказывает

<script type="text/javascript">alert()</script>

в макете, где метод $this->head() есть.

все работает нормально, пока вы не хотите представить только основную часть без разметки. Без него (и его методов, таких как beginPage()) ссылки JS и CSS не могут быть отображены предыдущим способом, и именно поэтому этот причудливый код jQuery, вращающий квадрат, не работает - JS библиотека не входит.

когда вы звоните $this->render() в виде или просто позвонив $this->renderPartial() С контроллера именно это и происходит-макет не применяется.

renderAjax() теперь приходит на помощь.

этот метод не заботится о макете, потому что он называет beginPage(), head(), beginBody(), endBody() и endPage() методы сами по себе. Благодаря этому каждый фрагмент кода JS может быть прикреплен к визуализированное представление и библиотека jQuery могут снова повернуть этот квадрат, даже если это необходимо сделать внутри всплывающего окна AJAX.


render () public method

рендерит вид.

вид, который будет отображаться, может быть указан в одном из следующих форматов:

псевдоним (например,"@app/views/site/index"); абсолютный путь в приложении (например,"//site/index"): имя представления начинается с двойных косых черт. Фактический файл представления будет искать под путем представления приложения. абсолютный путь в текущем модуле (например, "/site/index"): имя представления начинается с один косой удар. Фактический файл представления будет искать под путем представления текущего модуля. относительное представление (например, "индекс"): имя представления не начинается с @ или /. Соответствующий файл представления будет искать под путем представления контекста view $. Если $context не задан, его будут искать в каталоге, содержащем отображаемое в данный момент представление (т. е. это происходит при отображении представления в другом представлении).

renderAjax () public метод

отображает представление в ответ на запрос AJAX.

этот метод аналогичен render () за исключением того, что он будет окружать отображаемое представление вызовами beginPage(), head(), beginBody (), endBody () и endPage (). Таким образом, метод может вводить в результат рендеринга скрипты JS/CSS и файлы, зарегистрированные в вид.

renderAjax()

render ()