我在ajax上添加记录时遇到问题,该记录使用其他两个用于编辑和删除的ajaxified链接进行部分渲染。但我得到的错误是jquery不是函数。
通过在网上搜索解决方案,我得到了以下内容。 将第四个参数设为true并注册脚本。
$this->renderPartial("_part", array('parms' => $model), false, true);
要注册脚本,我在主视图文件中添加了以下行。
<?php Yii::app()->clientScript->registerScript("jquery"); ?>
在图书馆里说。
public CClientScript registerScript(string $id, string $script, integer $position=NULL)
从上面这一行我得到的id必须是脚本标签的id。喜欢;
<script id="someid"></script>
。但我无法得到第二部分,因为我想注册主页中脚本标签中的js。
我该怎么做?
答案 0 :(得分:0)
执行renderPartial
并使用ajax加载内容后,再次加载脚本。
例如,你有一些jQueryUI datepicker,它不会在渲染部分内部工作。即使您正确地注册脚本等,您也需要重新启动对象以使小部件正常工作。
将脚本加载到渲染部分非常糟糕,因为你会有双重负载。然后,您需要从脚本地图中删除脚本,并用手加载页面。 因此,请在页面上加载所有脚本。加上这个:
`if(Yii :: app() - &gt; request-&gt; getIsAjaxRequest()){
Yii :: app() - &gt; clientScript-&gt; scriptMap ['*。js'] = false;
Yii :: app() - &gt; clientScript-&gt; scriptMap ['*。css'] = false;
$这 - &GT;的RenderPartial( 'someview',阵列()) } `
实际上这有效,但效率很高。
我有类似的问题。我的解决方案很简单。留下仅渲染部分的内容。我的意思是:
第一个案例。例如,您需要一些包含其他详细信息的确认页面。因此,在用户单击somwhere后,您将显示此1,而不是之前的。在这种情况下,您可以使用render()
。它不会导致页面重新加载,你不会遇到小部件问题。在页面加载时,您可以显示像wheel或smthing一样甜蜜的东西。
第二个案例。您需要在表单上显示其他字段或其他内容等。在这种情况下,javascript是您的朋友。这里不需要Ajax。
第3例。加载一些额外的内容,同时保存上一个和小部件。在这种情况下,您可能会有像
这样的结构_______________
| Page |
| |
|Add content |
|_____________|
您需要在页面中初始化所有脚本和对象。仅加载renderpartial
的内容。这就是它的设计目标。例如,写内容的结构,使其隐藏,在成功时用内容填充它并向用户显示。
这是非常令人沮丧的问题。但在90%的情况下,你可以通过微小的变化来避免它。 这是关于这个问题的线索。 http://www.yiiframework.com/forum/index.php?/topic/10427-ajax-clientscript