elixir 的页面调用函数方法

尚不完整 等时间充足了统一整理下

在了解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

猜你喜欢

转载自blog.csdn.net/liguangix/article/details/81336080