2012-03-13 48 views
1

這些標籤讓我可以編寫帶有_ticket的html,而當我爲ajax做html時,我會寫「ticket」。下面是Ajax調用了HTML ...(注意票可變)playframework,ajax並獲取請求的可重用性..如何?

<div> 
    <div class="entry"> 
     <div class="spacer"></div> 
     <span class="label ">Release<span>(Optional)</span></span> 
     <span class="input "> 
      #{select 'ticket.release', items:releases, valueProperty:'id', labelProperty:'name', value:ticket?.release?.id/} 
     </span> 
     <div style="clear: both;"></div> 
    </div> 
</div> 

<div> 
    <div class="entry"> 
     <div class="spacer"></div> 
     <span class="label ">Subproj/Cat.<span>(Optional)</span></span> 
     <span class="input "> 
      #{select 'ticket.subproject', items:subprojects, valueProperty:'id', labelProperty:'name', value:ticket?.subproject?.id/} 
      <a id="newinfo" class="help" title="&{'help.subproject'}">Help</a> 
     </span> 
     <div style="clear: both;"></div> 
    </div> 
</div> 

如果我想在其他頁面重用此頁面像這樣

#{projectInfoPage ticket:ticket} 

它不會工作,因爲我有修改上面的頁面在每一種情況下都是_ticket,因此它可以工作(我更喜歡seam是否具有全局變量,並且能夠通過,因爲在這種情況下,我只需使用全局票證並完成)。

無論如何,有沒有辦法在playframework中編寫這樣的腳本,這樣上面的頁面在兩種情況下都能工作?哦,等一下,作爲一個標籤,它必須進入標籤文件夾! GRRRR。

嗯,我能想到解決這個問題的唯一方法就是讓projectInfoPage.html變成簡單的#{projectInfoTag ticket:ticket}並將上面的代碼移動到tags文件夾,然後添加#{projectInfoTag ticket:ticket}到我的主頁get請求爲get和爲ajax調用工作。這有點難看。其他人遇到這個?任何方式擺脫額外的文件,我必須使它可重複使用?

回答

2

上面的代碼可以重複使用,您只是在太多的地方將ticket更改爲_ticket。在你的選擇標籤中,名稱元素(即在POST中作爲名稱發送到服務器的位不需要改變。這是純文本而不是變量。)

所以你的代碼應該看起來像下面...

#{select 'ticket.release', items:_releases, valueProperty:'id', labelProperty:'name', value:_ticket?.release?.id/} 

這就要求你在releases列表和ticket財產通過。請注意,在開始ticket.release部分沒有下劃線前綴,這將意味着選擇的價值以正確的方式發送到服務器。

另外,如果你只是萬t可重複使用的HTML代碼不是標籤,那麼您可以使用include標籤。

http://www.playframework.org/documentation/1.2.4/tags#include

作爲由文檔描述... include包括另一模板。所有當前模板的變量都可以在包含的模板中直接使用。

<div id="tree"> 
    #{include 'tree.html' /} 
</div> 
+0

ahhh,忽略我的評論.....我看,包括是答案!完善!!! – 2012-03-15 13:39:14

1

這不是真正的優雅,有可能是一個更好的解決方案,但你可以做這樣的事情在你的標籤:

#{if _ticket} 
    #{set ticket:_ticket} 
#{/if} 

這將設置ticket變量是參數_ticket。顯然在你的情況下,ticket已經設置,_ticket不是,那麼上面的if語句將返回false,因此ticket仍然可以按原樣工作。

+0

很酷,給你點。不知道@codemwnci發佈的包含標籤....那一塊石頭!!!! – 2012-03-15 13:41:56