2013-06-18 84 views
0

我正在面對添加ajax上的記錄時出現問題,該記錄呈現部分與其他兩個ajaxified鏈接進行編輯和刪除。但我得到的錯誤,jQuery不是一個函數。ajax請求上的腳本問題

通過搜索網絡的解決方案,我得到以下。 使第四個參數爲true並註冊腳本。

$this->renderPartial("_part", array('parms' => $model), false, true); 

而要註冊腳本,我在主視圖文件中添加了以下行。

<?php Yii::app()->clientScript->registerScript("jquery"); ?> 

而且在圖書館裏說。

public CClientScript registerScript(string $id, string $script, integer $position=NULL) 

從上面的一行我得到的ID必須是腳本標記的ID。喜歡; <script id="someid"></script>。但我無法獲得第二部分,因爲我想註冊主頁面中腳本標記中的js。

我該怎麼做?

+0

爲了註冊jQuery,你必須使用:'Yii :: app() - > clientScript-> registerCoreScript(「jquery」);' – Ezze

+0

@Ezze仍然是同樣的錯誤。字符串「jquery」是腳本標記的ID嗎? –

+0

'registerScript()'函數的第二個參數是一個JavaScript代碼,將包含在'script'標記中。如果您想從現有文件註冊一些JS代碼,您必須使用'CClientScript'的[registerScriptFile()](http://www.yiiframework.com/doc/api/1.1/CClientScript#registerScriptFile-detail)方法。 – Ezze

回答

0

做完renderPartial後,用ajax加載你的內容,你再一次加載你的腳本。

例如,你有一些jQueryUI日期選擇器,它不會在渲染部分內工作。即使您將腳本正確註冊等,您也需要重新創建對象以使您的小部件能夠正常工作。

在渲染零件中加載你的腳本是一個非常糟糕的主意,因爲你會有雙重加載。然後,您需要從腳本映射中刪除腳本,然後用手將它們加載到您的頁面上。 因此,加載頁面上的所有腳本。補充一點:

`如果(Yii的::應用程序() - >請求 - > getIsAjaxRequest()){

的Yii ::應用程序() - > clientScript->腳本映射[ '* JS。'] =假; Yii :: app() - > clientScript-> scriptMap ['* .css'] = false;};}};}}}}

$這個 - >的RenderPartial( 'someview',陣列()) } `

其實這個工作,但它的效率和壞。

我有類似的問題。我的解決方案很簡單。僅在渲染部分留下內容。我的意思是:

第一種情況。例如,您需要一些確認頁面以及其他詳細信息。因此,在用戶點擊somwhere之後,您無需事先向他展示此1。在這種情況下,您可以使用render()。它不會導致頁面重新加載,你不會有小部件的問題。在頁面加載時,您可以顯示一些甜美的東西,比如輪子或者鮮奶。

第二種情況。您需要在表單上顯示其他字段或其他內容等。在這種情況下,javascript是您的朋友。這裏不需要Ajax。

第三種情況。加載一些額外的內容,並保存之前的內容和小部件。在這種情況下,您可能會有像

_______________ 
| Page  | 
|    | 
|Add content | 
|_____________| 

您需要在您的頁面中初始化所有腳本和對象。僅加載renderpartial的內容。那就是它的設計。例如編寫內容結構,使其隱藏起來,在成功的情況下填充內容並顯示給用戶。

它真的令人沮喪的問題在yii。但在90%的情況下,你可以通過小的改變避免它。 這裏是關於這個問題的線程。 http://www.yiiframework.com/forum/index.php?/topic/10427-ajax-clientscript