2012-09-05 50 views
1

我知道一些職位已經處理同一主題。php爆炸不工作在JavaScript模板

以下是鏈接:

Javascript Template Engine Use with jQuery

What is x-tmpl?

我試圖將一個PHP函數爆炸成一個JavaScript模板。該插件是從blueimp @https://github.com/blueimp/jQuery-File-Upload/downloads jQuery-File-Upload從GitHub下載的。

以下是我試圖執行並使其工作的代碼的一部分。

  <!-- The template to display files available for download --> 
     <script id="template-download" type="text/x-tmpl"> 
     {% for (var i=0, file; file=o.files[i]; i++) { %} 
      <tr> 
       <td> 
        <?php echo "{%=file.name%}"; ?> //{%file.name%} contains a string seperated by underscores 
        <?php $file_name_long = '{%=file.name%}'; ?> 
        <?php $file_name = explode ('_' , $file_name_long); ?> 
        <?php print_r($file_name); ?> 
       </td> 
      </tr> 
       ... 
       ... 

我能夠使$ FILE_NAME打印出來作爲一個數組,但我不能夠得到它我file.name內分隔由下劃線。打印陣列包含整個字符串,按照file.name

我不確定這是否可能。我一直在努力。如果這不是可行或邏輯不正確,請讓我知道,以便我可以停止嘗試想要做這項工作。感謝和讚賞。

+0

請問您提供當前生成的輸出嗎? – Dameo

+0

我得到這個 - > vendor_unknown_Pearls.gif Array([0] => vendor_unknown_Pearls.gif) – Lawrence

回答

5

你正嘗試閱讀你的PHP代碼中的JavaScript值。

{%=file.name%}是一個簡單的php字符串,當php呈現輸出時不包含實際的文件名。所以你的print_r()會輸出{%=file.name%},然後在整個php處理完成後,它會在瀏覽器中稍後翻譯成你的文件名。

嘗試在javascript中實現這個東西。

+0

這意味着在JavaScript中做爆炸? – Lawrence

+0

是的。但你必須弄清楚如何在模板文件中運行javascript。相當於explode()的javascript是'split()' –

+0

hmm。但我不能直接添加分裂yah?因爲它的模板腳本..?它會顯示一些錯誤? – Lawrence

2

您正試圖在客戶端(在您的js模板中)執行服務器端代碼(php)。代碼{%=file.name%}在您的php代碼嘗試執行時沒有被替換(因爲它在服務器上)。

如果你混合使用服務器端和客戶端代碼,你真的需要管理你的邏輯來考慮在客戶端之前執行的服務器。

+0

我想我得到了一些延伸。這意味着當它進入爆炸函數時,{%= file.name%}不會被轉換爲實際的文件名,而只是保持當前的形式。這就是爲什麼文件名的值不會爆炸到我想要的形式。 – Lawrence