我试图弄清楚我可以在嵌入式长生不老药前面使用什么来检查某物是否为数字。
这是我的代码
<%= form_for @changeset, @action, fn f -> %>
<%= if @changeset.action do %>
<div class="alert alert-danger">
<p>Oops, something went wrong! Please check the errors below.</p>
</div>
<% end %>
<!--- CAN I CHECK if @action is integer here? -->
<%=if Integer.parse(@action) %>
<div class="form-item">
<%= label f, :shipping_address, class: "is-req" %>
<%= text_input f, :sender_address %>
<%= error_tag f, :label %>
</div>
<div class="form-item">
<%= label f, :Receiver_Group_Name, class: "is-req" %>
<%= text_input f, :reciever_group_name %>
<%= error_tag f, :reciever_group_name %>
</div>
<div class="form-item">
<%= label f, :Shipping_Items, class: "is-req" %>
<%= text_input f, :items %>
<%= error_tag f, :items %>
</div>
<div class="form-item">
<%= label f, :Funding, class: "is-req" %>
<%= text_input f, :funding %>
<%= error_tag f, :funding %>
</div>
<div class="form-item is-text-center">
<%= submit "Submit", class: "button is-big" %>
</div>
<% end %>
所以我已经知道Integer.parse()在前端不起作用,但是是否可以使用类似的方法检查变量?如果没有,有没有办法可以将@action与javascript接口?
第一个使用elixir / Phoenix的项目,任何提示都值得赞赏。
答案 0 :(得分:1)
我已经知道
Integer.parse()
在前端不起作用”
我怀疑我是否遵循预期的意思。模板在后端处理。 Integer.parse/2
总是返回真实值,使if Integer.parse(whatever)
基本上成为NoOp。
您可能想要的是在控制器中设置另一个 assign :
it_is_integer =
case Integer.parse(action) do
{_int, ""} -> true
{_int, _} -> false
:error -> false
end
将此分配传递给Phoenix.Controller.render/3
或任何地方(it_is_integer: it_is_integer
)并在您的模板中使用:
<%= if @it_is_integer %>
旁注:我不熟悉Phoenix,但是AFAICT @action
是never supposed to be an integer。