微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Yii:如何呈现部分动态JavaScript小部件

我在html文件中动态重新加载区域时遇到问题.我使用基于Ajax的方法.我成功更新了我感兴趣的区域(HTML div标签),但每次我进行更新时,都会下载并处理相同的JavaScript以及替换的HTML代码,这会消耗时间.我希望浏览器在AJAX更新时重复使用上次下载的JavaScript文件,而不是一次又一次地获取相同的内容,这会导致过多的开销.我的意思是说?假设我有一个Button Widget,它附带了widget.js JavaScript.此JavaScript将负责按钮单击时触发的事件.每次单击此按钮时,该事件将“拍摄”AJAX请求,HTML页面上的特定区域会随着widget.js的下载而更新.我希望widget.js仅在第一次下载,但目前它在每个AJAX请求上下载.我注意到每次提到的JavaScript文件都是使用附加的查询参数_随机值.

widget.js?_=1374504824837

如何禁用此随机参数?

我的index.PHP

<p>
    <div id='widget-container'>
        <?PHP 
            $this->renderPartial('widget');
        ?>
    </div>
</p>

我的控制器

public function actionWidget()
{
    $this->renderPartial('widget',array(),false,true);
}

我的widget.PHP

<?PHP
    $url = 'widget';
    $update = '#widget-container';
    $this->widget('ext.bootstrap.widgets.TbButton',
    array('label' => 'Widget',
        'size' => 'medium',
        'buttonType' => 'ajaxButton',
        'url' => $url,
        'ajaxOptions' => array('type' => 'POST',
                  'update' => $update,
                  'cache' => false),
        'htmlOptions' => array('id' => 'widget'.uniqid())
    )
    );
?>

解决方法:

一个扩展名NLCClientScript,用于防止在通过ajax更新视图时重复链接javascript文件,替换Yii的原始ClientScript类.

稍微不同的方法是将renderPartial的processOutput变为false,但是,在这种情况下,它根本不会嵌入任何js

$this->renderPartial('widget', array(), false, false);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐