0

我在 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。

我该怎么做呢?

4

1 回答 1

0

完成renderPartial并使用 ajax 加载内容后,您将再次加载脚本。

例如,您有一些 jQueryUI 日期选择器,它不会在渲染部分内工作。即使您将正确注册脚本等等,您也需要重新初始化对象以使您的小部件工作。

在渲染部分加载脚本是非常糟糕的主意,因为您将有双重加载。然后,您需要从脚本映射中删除脚本并用手将它们加载到您的页面上。所以加载页面上的所有脚本。添加这个:

`if (Yii::app()->request->getIsAjaxRequest()) {

Yii::app()->clientScript->scriptMap['*.js'] = false;

Yii::app()->clientScript->scriptMap['*.css'] = false;

$this->renderpartial('someview',array()) } `

实际上这有效,但它有效且不好。

我有类似的问题。我的解决方案很简单。只保留渲染部分的内容。我的意思是说:

第一种情况。例如,您需要一些带有其他详细信息的确认页面。因此,在用户单击某处后,您向他展示了此 1 而没有先前的。在这种情况下,您可以使用render(). 它不会导致页面重新加载,并且您不会遇到小部件问题。在页面加载时,您可以显示一些甜蜜的东西,例如轮子或其他东西。

第二种情况。您需要在表单等上显示其他字段或其他内容。在这种情况下,javascript 是您的朋友。这里不需要 Ajax。

第三种情况。加载一些额外的内容,并在其中保存以前的和小部件。在这种情况下,您可能会有类似的结构

_______________
| Page        |
|             |
|Add content  |
|_____________|

您需要初始化页面中的所有脚本和对象。仅加载带有renderpartial. 这就是它的设计目的。例如,编写内容结构,将其隐藏,成功后用内容填充它并向用户显示。

它在 yii 中真是令人沮丧的问题。但在 90% 的情况下,您可以通过小的更改来避免它。这是关于这个问题的线程。http://www.yiiframework.com/forum/index.php?/topic/10427-ajax-clientscript

于 2013-06-19T08:11:04.737 回答