Phoenix Datepicker仅显示可用日期

时间:2016-10-17 14:42:50

标签: datepicker elixir phoenix-framework ecto dynamic-forms

我正在使用Phoenix框架开发一个简单的预订系统。目前,我有一个新预订的路线,显示一个日期选择器,它采用具有以下属性的“预订”模型的值:

:time, Ecto.DateTime
:description, :string
belongs_to :user, Test.User

当我前往“预订/新”时,我的表格被正确显示,我可以选择我想要的任何日期。但是,我现在正试图弄清楚如何从选择器中删除不可用的日期。

A screenshot of my form

据我所知,表单是从的DateTime原始类型获取值,但是来自OOP背景我无法弄清楚我需要更新哪些资源才能删除不可用的日期。我是否必须创建自定义类型?

提前致谢

2 个答案:

答案 0 :(得分:1)

您无法阻止默认DateTime选择器中的任意日期。您可以限制范围(例如,将年限限制为1234至1243或月至1月至6月),但由于他们是独立的<select>输入,因此您无法隐藏特定组合。我能想到的两种解决方法是:

  1. 在服务器上进行验证。如果需要,您可以在用户选择时立即使用AJAX进行验证,而无需刷新页面。

  2. 使用JavaScript限制范围,阻止使用自定义JS选择拍摄日期,或使用现有的完整成熟的DatePicker /日历库。

答案 1 :(得分:1)

我对此反应还很晚,但我希望它能够帮助某人。您可以在表单上使用builder时使用date_select选项。

<%= date_select f, :time, builder: fn b -> %>
      <%= b.(:day, prompt: "Date") %> /
      <%= b.(:month, prompt: "Month") %> /
      <%= b.(:year, prompt: "Year") %>
    <% end %>

如果只需要日,月和年,这就是可以自定义它的方式。您也可以随着时间做同样的事情。