舉個例子我的控制器調用主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。
來源
2011-08-06 07:09:57
ace
沒錯。得到它了。謝謝@ace。控制器運行的東西,是老闆。但有時,老闆會從工蜂那裏得到建議。我希望能夠從視圖到控制器提供一些反饋機制。例如,根據視圖吐出的內容,有時我想包含一個js文件,但有時候會包含一個不同的js文件。輸出將具有稍微不同的用戶功能。但是,我希望在html標頭中或作爲body元素的最後一部分使用js鏈接。所以,視圖不會插入腳本標籤,控制器會。 – JBird
也許我問了太多的MVC模型,其中頁面構建的邏輯幾乎完全在控制器中。但是,該觀點仍然需要決定何時顯示某些事物,何時不顯示。是的,該決定的數據是從控制器傳來的,並且可以在那裏訪問,所以控制器負責處理它並不是不可能完成的任務。同時,對於嵌套視圖,每個控制器將不得不作出這些決定,而單一視圖可以以其他方式進行。 – JBird
我知道在'
'或''的最後部分組織js鏈接的必要性。但是在CodeIgniter的工作方式中,您需要將js鏈接嵌套在標題視圖或頁腳視圖中的if-else或switch-case實現中。 – ace