2013-03-18 47 views
0

我知道這個問題已被問了好幾次,但我似乎無法找到一個適當的解決方案,我的問題。如何處理在MVC網站查看特定的Javascript

我使用CodeIgniter,一個遵循MVC(模型 - 視圖 - 控制器)原理的PHP框架。

我有很多javascript文件,如jQuery和其他通用庫,我需要爲每個頁面包含在標記中。我也有查看特定的JavaScript,直接嵌入在腳本塊的視圖。

視圖的例子customerInfo.php

<script type="text/javascript"> 
    // some javascript here for customerInfo view 
    // I MUST be able to use PHP variables in this script block ex: 
    var customerName = "<?php echo $customerName; ?>"; 
</script> 

<p class="someClass">Hello <?=$customerName?>, may the lord provide you with bananas</p> 

我的網站佈局如下:

<html> 
<head> 
    <script src="http://coolStorybro.com/jquery.js" type="text/javascript"></script> 
    <script src="http://coolStorybro.com/commonStuff.js" type="text/javascript"></script> 
</head> 

<body> 

<div class="header">some header stuff</div> 

<div class="pageContent"> 
    <?php echo $view; ?> // In this case, $view will hold the view customerInfo 
</div> 


</body> 
</html> 

我的目標是有我在同一個地方所有的JavaScript,所以我可以縮小它,並最終將其放在我的頁面底部進行加載優化。

我知道我可以存儲該視圖特定的JavaScript在被稱爲customerInfo.js一個單獨的文件,並在標籤加載它,但我覺得這太過分了創建一個單獨的JavaScript文件爲每個查看和我將無法使用PHP在他們,我必須。

所以我問你們,有沒有解決我的問題,或者我註定我的網頁與腳本塊聚集在一起?

謝謝你的時間。

編輯:

莫不是把視圖特定的JavaScript(所有視圖)在一個文件中並以某種方式在模塊單獨它,只有加載特定的模塊,用於所需的視圖的方法嗎?

比方說viewsJS.js擁有所有該視圖特定的javascript:

module ("customerInfo", 
    $(".someClass").html("Bla bla bla"); 
); 

module ("invoiceInfo", 
    // Some code to be executed when the invoiceInfo module is loaded 
); 

一旦確定了每個模塊(意見)的JavaScript的定義,有將其加載到其相應的視圖的方式。事情是,我不能在我的視圖中有一個腳本塊來「加載」模塊,所以......我無能爲力。

+0

你有沒有試過像commonjs/amd模塊系統? – Ven 2013-03-18 14:46:38

+0

您不必在腳本中嵌入PHP。您可以將這些信息放入HTML元素的「數據」屬性中,或者類似的東西。 – Pointy 2013-03-18 14:47:36

+0

將javascript添加到頁面底部而不是頁眉是不好的做法。 – Derfder 2013-03-18 14:53:42

回答

1

application/views

/includes/javascript.php 
/template.php 

然後把你的主代碼的template.php創建該文件夾結構:

<html> 
<head> 
    <?php echo $this->load->view('includes/javascript'); ?> 
</head> 

<body> 

<div class="header">some header stuff</div> 
... 

,並把所有你的JavaScript在的JavaScript。PHP

application/views/includes 

例如像:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script> 

壓軸輸出看起來像在你的瀏覽器,如:

<html> 
<head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
     <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script> 
</head> 

<body> 

<div class="header">some header stuff</div> 
... 

支持加載特定的JavaScript文件,你可以做這樣的事情在您的javascript視圖中:

<?php if (is_frontpage()) : ?> 
    <script src="http://localhost/javascriptforfrontpage.js"></script> 
<?php endif; ?> 

<?php if (is_contact()) : ?> 
    <script src="http://localhost/javscriptforcontactpage.js"></script> 
<?php endif; ?> 

<?php // this would be loaded everywhere ?> 
<script src="http://localhost/javascripteverypage.js"></script> 

僅加載客戶信息javascript:

第一次從控制器發送到您的視圖$data['load_js_customer_info']像:

public function customerInfo() 
    { 

     $data['load_js_customer_info'] = "Customer Info"; 
     $data['customer'] = $this->mdl_admin->get_customer(); 
     $this->load->view('template', $data); 
    } 

,並在視圖(包含所有的JavaScript),你犯了一個條件:所以,如果從客戶信息控制不是,沒有加載

<?php if ($load_js_customer_info) : ?> 
    <script src="http://localhost/javscriptforcustomerinfo.js"></script> 
<?php endif; ?> 

的javscript。

+0

你的回答可以使用一些說明。我真的不明白你真正的意思是「元」。我想你的第二個「meta」實際上是「javascript」。 – user2012040 2013-03-18 17:36:08

+0

忘掉元。無論如何,它是否適用於這種方式加載JavaScript? – Derfder 2013-03-18 17:39:06

+0

我不知道它將如何解決我的問題。我解釋你的答案的方式是,你的includes/javascript視圖將是一個持有javascript視圖的PHP文件。在那種情況下,我只會包含一個包含所有視圖代碼的JavaScript文件,但這不是我所需要的。在這種情況下,我需要以某種方式只加載該特定視圖的javascript(customerInfo)。 – user2012040 2013-03-18 17:48:32