jquery-ui 使用简单形式自动完成
jquery-ui autocomplete with simpleform
我刚刚花了一些时间解决这个问题,如果我这样做了,也许其他人也会这样做。所以我先放问题再放答案...
我在 Rails 5 上 运行 并尝试稍微整理一下我的代码,并从 form_for 更改为 simple_form_for.
通过 form_for,我通过遵循此 tutorial 并解决了 turbo-links 问题设法让自动完成工作。
并且有:
_form.html.erb 以下
...
<div class="form-group">
<%= f.label :cae_id, class: "col-md-5 control-label" %>
<div class="col-md-7">
<%= f.text_field :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
</div>
</div>
...
和companies.coffee
$(document).on 'turbolinks:load', ->
jQuery ->
$('#company_cae_codenr').autocomplete source: $('#company_cae_codenr').data('autocomplete-source')
jQuery ->
$('#user_company_attributes_cae_codenr').autocomplete source: $('#user_company_attributes_cae_codenr').data('autocomplete-source')
和我的 caes_controller:
def index_autocomplete
@caes = Cae.order(:codenr).where("codenr like ?", "%#{params[:term]}%")
render json: @caes.map(&:codenr)
end
和我的company.rb
...
def cae_codenr
cae.try(:codenr)
end
def cae_codenr=(codenr)
self.cae = Cae.find_by(codenr: codenr) if codenr.present?
end
...
当我改变
<div class="form-group">
<%= f.label :cae_id, class: "col-md-5 control-label" %>
<div class="col-md-7">
<%= f.text_field :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
</div>
</div>
匹配 html 代码:
<div class="form-group">
<label class="integer required col-md-5 control-label" for="company_cae_id">
<abbr title="required">*</abbr>
Cae
</label>
<div class="col-md-7">
<input data-autocomplete-source="/caes/index_autocomplete" data-remote="true" type="text" name="company[cae_codenr]" id="company_cae_codenr" />
</div>
</div>
至
<%= f.input :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
与以下HTML
<div class="input string optional company_cae_codenr">
<label class="string optional" for="company_cae_codenr">Cae codenr</label>
<input class="string optional" type="text" name="company[cae_codenr]" id="company_cae_codenr" />
</div>
当我开始在输入中输入数字时,我得到
this.source is not a function
错误
所以...我一直在寻找有关 jquery 和简单形式的解决方案,还有此错误消息,但似乎没有任何直接解决方案在这里起作用...
这个问题的解决方案实际上是在我写问题的时候想到的,并决定粘贴 html 来源。
因此,当一个人知道某些事情有效,而某些应该做类似事情的事情不起作用时,作为一种调试方法,这是一个很好的教训。
当我比较两个 html 代码时,我注意到 data-autocomplete 属性没有以简单的形式发送。然后问题就来了:如何将数据属性传递给简单形式?
瞧,Whosebug 有答案:,所以最后我得到了:
<%= f.input :cae_codenr, input_html: {data: { autocomplete_source: index_autocomplete_caes_path}} %>
我刚刚花了一些时间解决这个问题,如果我这样做了,也许其他人也会这样做。所以我先放问题再放答案...
我在 Rails 5 上 运行 并尝试稍微整理一下我的代码,并从 form_for 更改为 simple_form_for.
通过 form_for,我通过遵循此 tutorial 并解决了 turbo-links 问题设法让自动完成工作。
并且有: _form.html.erb 以下 ...
<div class="form-group">
<%= f.label :cae_id, class: "col-md-5 control-label" %>
<div class="col-md-7">
<%= f.text_field :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
</div>
</div>
...
和companies.coffee
$(document).on 'turbolinks:load', ->
jQuery ->
$('#company_cae_codenr').autocomplete source: $('#company_cae_codenr').data('autocomplete-source')
jQuery ->
$('#user_company_attributes_cae_codenr').autocomplete source: $('#user_company_attributes_cae_codenr').data('autocomplete-source')
和我的 caes_controller:
def index_autocomplete
@caes = Cae.order(:codenr).where("codenr like ?", "%#{params[:term]}%")
render json: @caes.map(&:codenr)
end
和我的company.rb
...
def cae_codenr
cae.try(:codenr)
end
def cae_codenr=(codenr)
self.cae = Cae.find_by(codenr: codenr) if codenr.present?
end
...
当我改变
<div class="form-group">
<%= f.label :cae_id, class: "col-md-5 control-label" %>
<div class="col-md-7">
<%= f.text_field :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
</div>
</div>
匹配 html 代码:
<div class="form-group">
<label class="integer required col-md-5 control-label" for="company_cae_id">
<abbr title="required">*</abbr>
Cae
</label>
<div class="col-md-7">
<input data-autocomplete-source="/caes/index_autocomplete" data-remote="true" type="text" name="company[cae_codenr]" id="company_cae_codenr" />
</div>
</div>
至
<%= f.input :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
与以下HTML
<div class="input string optional company_cae_codenr">
<label class="string optional" for="company_cae_codenr">Cae codenr</label>
<input class="string optional" type="text" name="company[cae_codenr]" id="company_cae_codenr" />
</div>
当我开始在输入中输入数字时,我得到
this.source is not a function
错误
所以...我一直在寻找有关 jquery 和简单形式的解决方案,还有此错误消息,但似乎没有任何直接解决方案在这里起作用...
这个问题的解决方案实际上是在我写问题的时候想到的,并决定粘贴 html 来源。
因此,当一个人知道某些事情有效,而某些应该做类似事情的事情不起作用时,作为一种调试方法,这是一个很好的教训。
当我比较两个 html 代码时,我注意到 data-autocomplete 属性没有以简单的形式发送。然后问题就来了:如何将数据属性传递给简单形式?
瞧,Whosebug 有答案:,所以最后我得到了:
<%= f.input :cae_codenr, input_html: {data: { autocomplete_source: index_autocomplete_caes_path}} %>