Что такое 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 и файлы, зарегистрированные в вид.