2011-02-26 58 views
0

基本上,我的模型要求對象綁定到物理位置。爲此,我通過使用用戶在文本字段中輸入的關鍵字通過AJAX從API中提取位置,當用戶選擇推薦給他們的有效位置時,jQuery自動完成設置爲將隱藏字段設置爲唯一ID。如何根據驗證失敗添加Symfony表單字段?

這很好,假設用戶有JavaScript並點擊了一個位置。

我需要實現一個回退,也就是說,無論出於何種原因,如果提交的表單沒有隱藏字段的值,表單應該使用可見的任何內容來查詢API併爲用戶提供一個選擇框從中選擇一個值。

我大致知道我需要添加的代碼,但是我失去了將它綁定在哪裏。任何幫助表示讚賞。

回答

0

基本上你必須創建一個custome小部件,並用它來代替位置表單域。然後,您可以將JavaScript添加到小部件呈現中。如果您擴展sfWidgetChoice或相當的原則,它將默認爲選擇框。然後,如果啓用了js,您的小部件的js會將該字段重寫爲自動完成。

看看sfFormExtraPlugin的一些很好的例子,瞭解如何做到這一點。

+0

我不確定你是否完全閱讀我的問題,我已經完成了你所建議的所有內容,現在我正在努力解決這個問題。 – Steve

+0

我在說的是。您的小部件應該默認爲備用元素。那麼當且僅當js(或其他)被啓用時,元素纔會變成自動完成。它被稱爲漸進式增強http://www.alistapart.com/articles/understandingprogressiveenhancement/ – xzyfer

+0

或者你可以使用優雅的降級(http://dev.opera.com/articles/view/graceful-degradation-progressive-enhance/)說它是最好的,它可以是默認情況下(即自動完成),然後讓它回落,如果功能不支持(即JavaScript)。無論哪種方式,所有這些應該是你的小部件的一部分,這就是爲什麼我建議你看看sfFormExtraPlugin,這是如何在你的小部件中使用漸進增強的一個很好的例子。 – xzyfer