尚不完整 等時間充足了統一整理下
在瞭解elixir項目目錄結構後就知道個大概。
1.頁面下拉框取值數據庫中的值
2.類似於Java 實體類中包含着另一個實體類的功能 在elixir中稱實體類爲模塊。也就是模塊包含這一個子模塊。
先解決問題1,(說實話可能是不熟elixir的原因,有些不習慣。不過真的是非常的方便,好多在Java中的代碼在elixir中都不用寫,是非常方便程序員的。可能也是寫代碼量較少,目前我感覺排錯還太好找到根源。)
首先一般我們寫頁面的下拉框是這樣的:
<div class="form-group row">
<label for="example-month-input" class="col-2 col-form-label">狀態</label>
<div class="col-10">
<select class="custom-select col-12" id="inlineFormCustomSelect">
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
</div>
而人家elixir的Phoenix的模板可以這樣用:
用了好多<%= %>標籤
重點是調用函數 get_status(),它是定義在 views文件夾中對應你頁面的XXX_views.ex視圖文件
我的舉例:
我修改的project文件夾下的form.html.eex文件中的select標籤
那我的get_status()函數定義在views/project_views.ex中。
<div class="form-group <%= get_input_class(@changeset, :status) %>">
<%= label f, "狀態", class: "form-control-label" %>
<%= select f, :status, get_status(), class: "form-control" %>
<%= error_tag f, :status %>
</div>
get_status()實現代碼:
直接返回兩個字符串。你要問我 Project.System.Dict.ps_in_progress()這個是啥在那定義的,我只會說我不知道。
def get_status do
[{"項目進行中", Project.System.Dict.ps_in_progress()}, {"項目已完成", Project.System.Dict.ps_finished()}]
end
如果你想去查詢數據庫中的某表信息在返回回來就這樣寫:
#類似Java的導包功能
#alias Project.Base.project 這個是直接指定到哪個模塊了。下面是定義的是在Base的文件夾下所有的文件中匹配的函數(同名的)
alias Project.Base
def phases do
Base.list_phases()
|> Enum.map(&{&1.name, &1.id})
end