当我正常使用时,return this->render('create', ['model' => $model])我的弹出式窗口会一团糟。当我改变return $this->renderAjax('create', ['model' => $model]);一切时,一切都神奇地放在了正确的位置。我到处逛逛了很多,以了解有关renderAjax()的信息,但似乎绝对没有。有人可以告诉我它做什么吗?我知道ajax,但是据我所知,它通常与CSS或bootstrap无关。
return this->render('create', ['model' => $model])
return $this->renderAjax('create', ['model' => $model]);
要了解两者之间的区别render(),renderAjax()首先您需要了解其render()工作原理。
render()
renderAjax()
基本上,当render()被称为每一件JS和CSS代码和文件引用的观点注册聚集在多个阵列将在适当的地方后呈现- 这些地方都存储在布局和他们的代码是通过调用渲染beginPage(),head(),beginBody(),endBody()和endPage()。
beginPage()
head()
beginBody()
endBody()
endPage()
您可以通过在相关方法中设置第二个参数来指出应在何处呈现JS代码,例如:
$this->registerJs("alert()", \yii\web\View::POS_HEAD);
渲染
<script type="text/javascript">alert()</script>
在方法所在的布局中$this->head()。
$this->head()
一切工作正常,直到您只想渲染视图的主要部分而没有布局。没有它(及其方法beginPage()),就无法以以前的方式呈现JS和CSS引用,这就是为什么这个花哨的jQuery代码旋转正方形不起作用的原因- 那里没有包含JS库。
当您$this->render() 从视图内 调用或仅从$this->renderPartial()控制器调用时,确实发生了这种情况- 布局未应用。
$this->render()
$this->renderPartial()
renderAjax() 现在来救援。
这种方法不关心布局,因为它调用beginPage(),head(),beginBody(),endBody()并endPage()通过自身的方法。因此,每个JS代码段都可以附加到呈现的视图上,并且即使需要在AJAX弹出窗口中完成,jQuery库也可以再次旋转该正方形。