什么是renderAjax(),它与render()有什么不同?

Red*_*tle 7 ajax yii2

当我使用普通时,return this->render('create', ['model' => $model])我的弹出窗口全部变得混乱.当我改变return $this->renderAjax('create', ['model' => $model]);一切是神奇地在他们正确的地方.我已经看了很多关于renderAjax()的内容,但似乎绝对没有任何内容.有人能告诉我它的作用吗?我知道ajax,但据我所知,它通常与css或bootstrap无关.

Biz*_*ley 17

要了解它们之间的区别render(),renderAjax()首先需要了解它的render()工作原理.

基本上,当render()被称为每一件JS和CSS代码和文件引用的观点注册聚集在多个阵列将在适当的地方以后呈现-这些地方都存储在布局和他们的代码是通过调用渲染beginPage(),head(),beginBody(),endBody()endPage().

您可以通过在相关方法中设置第二个参数来指出应该呈现JS代码的位置 - 例如:

$this->registerJs("alert()", \yii\web\View::POS_HEAD);
Run Code Online (Sandbox Code Playgroud)

呈现

<script type="text/javascript">alert()</script>
Run Code Online (Sandbox Code Playgroud)

在布局中的方法$this->head()是.

一切都工作正常,直到你想要只渲染没有布局的视图的主要部分.没有它(及其方法beginPage()),JS和CSS引用无法以前面的方式呈现,这就是为什么这个花哨的jQuery代码旋转方块不起作用 - JS库尚未包含在那里.

当您$this->render() 在视图中进行调用或仅从$this->renderPartial()控制器调用时,确实会发生这种情况 - 不应用布局.

renderAjax() 现在来救援.

这种方法不关心布局,因为它调用beginPage(),head(),beginBody(),endBody()endPage()方法本身.多亏了这一点,每一段JS代码都可以附加到渲染视图中,即使需要在AJAX弹出窗口内完成,jQuery库也可以再次旋转这个方块.

  • 美丽的答案谢谢你.了解. (3认同)