尚不完整 等时间充足了统一整理下
在了解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