【问题标题】:Yii: How to render partial dynamically JavaScript widgetsYii:如何动态渲染部分 JavaScript 小部件
【发布时间】:2013-07-21 09:28:36
【问题描述】:

我在动态重新加载 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())
    )
    );
?>

【问题讨论】:

    标签: php ajax yii


    【解决方案1】:

    有一个扩展NLCClientScript,就是为了防止ajax更新视图时重复链接javascript文件,替代了Yii原有的ClientScript类。

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多