Yii& Backbone.js - renderPartial多次注册相同的脚本

时间:2012-12-13 09:28:40

标签: backbone.js yii

我使用Backbone路由器对Yii动作进行ajax调用,后者又加载部分视图

this->renderPartial('_foo',null,false,true);

但问题出现了,因为我多次使用相同的ajax调用,它会一次又一次地从局部视图加载所有脚本,这反过来会破坏应用程序。

有没有办法使用相同的动作调用模式来解决这个问题?或者如果不是我应该如何让Yii和Backbone合作?

1 个答案:

答案 0 :(得分:0)

在处理具有需要加载其他脚本的元素的ajax调用时,Yii小部件的设计非常糟糕。

bool.dev在评论中发布的解决方案是我处理这个问题的首选方式,但是还有其他方法,如果由于某种原因无效(这似乎适合你)。< / p>

在主视图文件中(使用render()调用的文件,而不是partialRender()),包括以下内容:

$this->renderPartial('_foo',null,true,true);

这将强制您的主页调用(因此,在ajax调用之前)包含脚本。由于第3个参数现在为true,因此它会将内容作为字符串返回,然后由于我们不将其存储在任何地方而被丢弃。

然后对于ajax调用,请使用

$this->renderPartial('_foo',null,false,false);

或只是

$this->renderPartial('_foo');

因为最后3个参数只是默认值。

这将阻止脚本多次加载,但仍然存在,因为它们存在于原始页面加载但不存在ajax调用。

根据_foo视图文件中的内容,您可能需要创建一个特殊文件。所需要的只是虚拟使用您想要脚本文件的小部件。

请记住,您要做的就是强制小部件在主页调用上运行,以便它注册其脚本,然后丢弃剩余的输出。然后在ajax调用上通过将processOutput参数设置为false来忽略它注册的所有脚本。