2013-07-22 27 views
3

我在動態重載html文件中的區域時遇到了問題。我使用基於Ajax的方法。我成功更新了我感興趣的區域(HTML div標記),但每次執行更新時,都會將相同的JavaScript下載並與替換的html代碼一起處理,這會消耗時間。我希望瀏覽器在AJAX更新時重用上次下載的JavaScript文件,而不是一次又一次地獲取相同的內容,這會導致過多的開銷。我的意思是?假設我有一個Button Widget,其中有widget.js附加了JavaScript。此JavaScript將負責點擊按鈕時觸發的事件。每次單擊此按鈕時,該事件都將「拍攝」AJAX請求,並且HTML頁面上的特定區域會隨着widget.js的下載得到更新(如有必要)。我希望widget.js僅在第一次下載,但目前它會在每個AJAX請求中下載。我注意到每次提到的JavaScript文件都帶有隨機值附帶的查詢參數_Yii:如何渲染部分動態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()) 
    ) 
    ); 
?> 

回答

5

有我這是一個擴展NLCClientScript,這是爲了防止在通過ajax更新視圖時替換javascript文件的重複鏈接,從而替換Yii的原始ClientScript類。

稍微不同的方式是把的RenderPartial的processOutput假,但是,在這種情況下,它不會在所有

$this->renderPartial('widget', array(), false, false); 
嵌入任何JS