Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 在论坛外持久化查询参数_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 在论坛外持久化查询参数

Elixir 在论坛外持久化查询参数,elixir,phoenix-framework,Elixir,Phoenix Framework,我正在开发一个搜索表单,它有两个分散输入:1)一个搜索框和一些下拉选择,2)几个带有预设过滤器的按钮 第一个(搜索框和下拉列表)是一个组件,它是一个表单,其中包含所有搜索和筛选选项 <%= c :filter, :search, query_params: @table.query_params %> <div class="row"> <div class="col-xs-12 col-md-3"> &

我正在开发一个搜索表单,它有两个分散输入:1)一个搜索框和一些下拉选择,2)几个带有预设过滤器的按钮

第一个(搜索框和下拉列表)是一个组件,它是一个表单,其中包含所有搜索和筛选选项

    <%= c :filter, :search, query_params: @table.query_params %>
      <div class="row">
        <div class="col-xs-12 col-md-3">
          <%= c :table_filter, :select,
            [
              name: :status,
              options: status_select_box(),
              operator: "eq",
              table: @table
            ]
          %>
</div>
  <% end %>
_btn.html.eex

<%= link to: @path, class: "btn" do %>
  <%=
   #this is pusdo code for the button, there is a bit more logic to
how it is displayed but essentially it just shows a label and the count
   @label @count

    %>
<% end %>


这两种表单都可以正常工作,问题是如果有人单击其中一个预设过滤器,如果他们去选择一个下拉列表,参数将不会保持不变。我想知道确保查询参数在这两种表单之间持久存在的最简洁的方法是什么。

我可以为您的问题找到几种解决方案

第一个是尝试用Phoenix LiveView解决您的问题。您可以在每次操作后重新呈现搜索表单,以更新预设按钮的
@path
属性


第二个是在主搜索表单中定义预设按钮。然后将属性
名称
和&值分配给预设按钮,使用
类型
作为
提交
。然后在后端,您可以根据您单击的预设按钮的值修改搜索属性(相关答案是如何做到这一点)。当您将按钮放置在主窗体中时,也可以获得下拉列表值。

下拉列表的作用是什么?你为什么要坚持?看起来它们是搜索表单的一部分,单击预设按钮可以重写搜索表单。如果我在选择一个选项后立即刷新页面,下拉列表是否应该保持不变?下拉列表是附加的过滤器。假设其中一个按钮是“精装”,另一个是“软装”。这些都是广泛的预设,但在选择“精装本”后,您可能希望使用“出版商”下拉列表来进行更精细的设置。有一个“all”按钮,它可以获取索引路径(无参数),有效地清除所有过滤器,否则,所有内容都应该保持不变。当我遇到这种情况时,我通常会做的是确保所有依赖部分在添加特定于部分的查询参数之前始终使用现有的查询参数。例如,分页部分可能需要在其特定参数(如
页面
)旁边应用
搜索
顺序
类别id
查询参数。最简单的方法是传递一个映射或params的关键字来重新应用到partial,然后您只需使用类似于
posts\u path(@conn,:index,map.merge(@query\u params,%{page:@page}))
的东西,如果我理解正确,那么我相信这与我们最终的做法类似,有关更多信息,请参阅我对@achempion的回复。有几个问题使这一点更加复杂;但是,我们最终解决了这个问题,在主搜索表单中有一个隐藏的选择框,该框将使用特定预选过滤器的参数进行更新。其他预选过滤器与现有的选择框相关联,因此不会导致任何问题。
<%= link to: @path, class: "btn" do %>
  <%=
   #this is pusdo code for the button, there is a bit more logic to
how it is displayed but essentially it just shows a label and the count
   @label @count

    %>
<% end %>