2012-06-30 48 views
4

上午生成隱藏字段像這樣:玩2.0生成隱藏字段而不DIV包裝

@helper.input(_form("userID"), '_label-> None) { (id, name, value, args) => 
    <input type="hidden" name="@name" id="@id" value="@value" @toHtmlArgs(args)> 
} 

除外在div包裝塊元件被創建的事實,其在形式創建視覺空的空間,工作正常,看起來不好 - 如何使隱藏的輸入元素顯示沒有div包裝?

我知道我可以jQuery隱藏父div包裝,但我想不生成它在第一個地方。

回答

14

你不需要在這種情況下,使用@helper.input。試試這個:

@defining(_form("userID")) { uidField => 
    <input type="hidden" name="@uidField.name" id="@uidField.id" value="@uidField.value"> 
} 
+0

+1,啊,嗯,這是一個很酷的方式,感謝 – virtualeyes

1

好,能做到這一點,以及:

<input type="hidden" name="foo" value="@{_form("foo").value.map(x=>x).getOrElse("")}"> 
4

雖然問題已經回答了,我想給一個完整的例子,因爲這將有很多的幫助了我。

您可以在一個名爲「應用程序/視圖/幫手/ inputHidden.scala.html」文件看起來像定義自己的隱藏輸入助手:

@** 
* Generate a hidden HTML input. 
* 
* Example: 
* {{{ 
* @inputHidden(field = myForm("name"), args = 'data-ref -> 0) 
* }}} 
* 
* @param field The form field. 
* @param args Set of extra attributes. 
* @param handler The field constructor. 
*@ 
@(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang) 

@id = @{ args.toMap.get('id).map(_.toString).getOrElse(field.id) } 
@inputType = @{ args.toMap.get('type).map(_.toString).getOrElse("hidden") } 
@htmlArgs = @{ args.filter(arg => !arg._1.name.startsWith("_") && arg._1 != 'id).toMap.filter(_._1 != 'type) } 

<input type="@inputType" id="@id" name="@field.name" value="@field.value" @toHtmlArgs(htmlArgs)> 

這樣您就可以重複使用所有的代碼您的意見,併爲您的隱藏領域提供像data-ref="..."等附加參數。

1

使用原始的HTML作爲以前的答案在某些情況下,建議的作品很好,但不要忘了隱藏的輸入可能需要驗證(例如,如果它被用JavaScript填充在回答一些用戶交互,像一些日期選擇器做)。如果您在該字段上有驗證錯誤,提交將會失敗,但不會有任何視覺隊列爲什麼。

您可以編寫額外的html來顯示隱藏字段的錯誤,但如果error類不存在,我實際上會堅持使用@helper.input並使用css隱藏輸入。你不需要JavaScript來做到這一點。

+0

+1有趣的極端情況。在這裏使用jQuery的驗證插件,日期和時間選擇器沒有你所描述的問題,但我可以看到一個隱藏的領域失敗驗證將是相當困惑的用戶,沒有跡象表明爲什麼表單不會提交。 – virtualeyes