2011-11-20 28 views
12

我正在使用Play的應用程序!框架有一個名爲Taken的名爲gift的對象,它帶有一個布爾屬性。如何在我的視圖中將此值的狀態顯示爲複選框?我已經試過: - 基於我從自動生成的CRUD的形式看到的例子如何將複選框綁定到Play中的布爾值!框架

<input id="gift_Taken" class="" type="checkbox" name="gift.Taken" value="true" /> 
<input type="hidden" name="gift.Taken" value="false" /> 

,但是當屬性爲True,這就是我的目標沒有被選中的複選框。

任何人都知道實現這一目標的正確方法?

+0

只需在複選框和方法簽名中設置value ='true',添加一個參數'boolean taken'就可以完成綁定。 –

回答

9

如果值爲true,您只需在複選框中設置checked的值。

例如(假設從視圖發送中的對象被稱爲gift,且布爾值稱爲Taken

<input id="gift_Taken" type="checkbox" name="gift.Taken" ${gift.Taken ? 'checked':''} /> 
+0

完美 - 我喜歡三元運算符;-)附註中,會去獲取你的那本書 –

+1

三元運算符在Groovy中更加強大。結帳elvis運營商http://groovy.codehaus.org/Operators#Operators-EvisieOperator%28%3F%3A%29 – Codemwnci

+0

我試過這個,它沒有工作。我試過''所以這應該讓它一直檢查。但事實並非如此。任何想法爲什麼? –

12

接受的答案實際上是不是100%正確的,因爲它不能處理的「未登記」的情況下要處理,你需要一個隱藏字段兩種情況:

<input id="gift_Taken" type="checkbox" name="gift.Taken" ${gift.Taken ? 'checked':''} /> 
<input type="hidden" name="gift.Taken" value="false" /> 

注意,放置似乎是很重要的,所以隱藏字段必須複選框後

寫這個自定義模板標籤,可以很容易,不要忘記隱藏輸入(將此放入意見/標籤/ checkbox.html):

<input id="${_id}" type="checkbox" name="${_name}" value="true" #{if _checked} checked="checked" #{/if}> 
<input type="hidden" name="${_name}" value="false"> 

然後調用這個模板是這樣的:

#{checkbox id:'gift_Taken', name: 'gift.Taken', checked: gift.Taken /} 

也看的戲框架列表上的相關討論:https://groups.google.com/forum/?fromgroups=#!topic/play-framework/HygQuYF3a8E

+0

雖然不理想,但另一種解決方案是,如果在模型中使用默認值false,則缺少提交的複選框值將被隱式地解釋爲false。紅旗遍佈,但值得一提。 – chris

+1

感謝訂購提示(例如在php中使用相同的解決方案,但隱藏字段放在複選框之前)! – Bachi

0

如果你能夠使用JavaScript,你可以使用:

$(document).ready(function() { 
    $(":checkbox").each(function() { 
     var name = $(this).attr("name"); 
     if(typeof(name) != "undefined") { 
      var checkboxString = ""; 
      checkboxString = '<input type="hidden" style="display:none;" name="'+ name +'" value="false" />' 
      $(this).after(checkboxString); 
     } 
    }); 
});