0

我使用 Backbone 路由器对 Yii 操作进行 ajax 调用,从而加载部分视图

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

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

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

4

1 回答 1

0

当涉及到需要加载额外脚本的元素的 ajax 调用时,Yii 小部件的设计非常糟糕。

bool.dev 在评论中发布的解决方案是我处理此问题的首选方式,但还有其他方法,如果无论出于何种原因(您似乎就是这种情况)都不起作用。

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

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

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

然后对于 ajax 调用,使用

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

要不就

$this->renderPartial('_foo');

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

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

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

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

于 2012-12-13T15:30:57.583 回答