2011-08-06 20 views
1

我有一個打開容器視圖的控制器。然後容器將該頁面的建築物交給幾個視圖,包括「html_meta」視圖和「top_bar」,「side_bar」,「content」視圖。但是,內容包含多個不同的視圖,其中太多可以被視爲小工具,或包含不同數據的小div div,腳本操作。CodeIgniter - 容器視圖獲取子視圖所需的腳本列表(js)

問題: 如果我希望HTML標頭/元素只包含特定小工具視圖所需的腳本,有沒有辦法讓小工具視圖將必要的腳本組件備份到容器視圖以便它可以處理它們並將腳本添加到html頭部?

  • 如果它有幫助,我可以包括代碼,但現在,我認爲它在這裏變得混亂。但是,如果您需要代碼來將其可視化,則沒有問題。謝謝!

回答

1

舉個例子我的控制器調用主container但我必須將它傳遞我的內容是從另一種觀點認爲這樣

... 
$content['content'] = $this->load->view('about/index', $data, true); 
... 
$this->load->view('layout/container', $content'); 

然後layout/container.php包含幾個

... 
$this->load->view("layout/html_meta"); 
... 
$this->load->view("layout/top_bar"); 
... 
<div id="content"> 
    <?php echo $content?> 
</div> 

這是可能的但並不是子視圖「通知」「html_meta」包含它所需的javascripts,因爲您的視圖是從主容器向下呈現到子視圖。

你可以做的是爲你的外部java腳本創建一個助手。我想有每個小部件的一個javascript組如

function getJSforWidgetOne() { 
    $scripts = array(); 
    $scripts[] = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"; 
    $scripts[] = "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.js"; 
    return $scripts; 
} 

然後在您的控制器功能也通過這些腳本,或者可能你的構造。

$content['custom_js'] = getJSForWidgetOne(); 
$content['content'] = $this->load->view('about/index', $data, true); 
... 
$this->load->view('layout/container', $content'); 

所以,現在,$custom_js在你layout/container.php訪問。但它還沒有在layout/html_meta。所以我將它分配給一個數組,然後再次傳遞給layout/html_meta

... 
$for_html_meta['custom_js'] = $custom_js; 
$this->load->view("layout/html_meta", $for_html_meta); 
... 
$this->load->view("layout/top_bar"); 
... 
<div id="content"> 
    <?php echo $content?> 
</div> 

然後在你的layout/html_meta,你現在可以使用$custom_js從您共同拋開腳本插入額外的JavaScript。

+0

沒錯。得到它了。謝謝@ace。控制器運行的東西,是老闆。但有時,老闆會從工蜂那裏得到建議。我希望能夠從視圖到控制器提供一些反饋機制。例如,根據視圖吐出的內容,有時我想包含一個js文件,但有時候會包含一個不同的js文件。輸出將具有稍微不同的用戶功能。但是,我希望在html標頭中或作爲body元素的最後一部分使用js鏈接。所以,視圖不會插入腳本標籤,控制器會。 – JBird

+0

也許我問了太多的MVC模型,其中頁面構建的邏輯幾乎完全在控制器中。但是,該觀點仍然需要決定何時顯示某些事物,何時不顯示。是的,該決定的數據是從控制器傳來的,並且可以在那裏訪問,所以控制器負責處理它並不是不可能完成的任務。同時,對於嵌套視圖,每個控制器將不得不作出這些決定,而單一視圖可以以其他方式進行。 – JBird

+0

我知道在''或''的最後部分組織js鏈接的必要性。但是在CodeIgniter的工作方式中,您需要將js鏈接嵌套在標題視圖或頁腳視圖中的if-else或switch-case實現中。 – ace