YubinBangoをTurbolinks下で使う場合
at 2017-03-15 01:47 (UTC)
YubinBangoというまあ郵便番号から住所検索するよくあるやつだけど、HTMLのclassベースでできるのでとても便利なやつがある。
これを Rails で Turbolinks 使いながらやる場合は一手間必要ですよというお話。(Rails 5.0.1, Turbolinks 5.0.1)
まずは app/views/layouts/application.html.erb
に下記を加える。
<script src="https://yubinbango.github.io/yubinbango/yubinbango.js" charset="UTF-8"></script>
次にフォームに class を仕込んでいく。
form_for
に直接 h-adr
を仕込んでもいいけど div
にしておけば自宅・勤務先のように、1つのフォームに複数配置できる。
<div class="h-adr">
<span class="p-country-name" style="display:none;">Japan</span>
<div class="form-group">
<%= f.label :zip_code, class: "col-sm-2 control-label" %>
<div class="col-sm-2">
<%= f.text_field :zip_code, class: "form-control p-postal-code" %>
</div>
</div>
<div class="form-group">
<%= f.label :address, class: "col-sm-2 control-label" %>
<div class="col-sm-10">
<%= f.text_field :address, class: "form-control p-region p-locality p-street-address p-extended-address" %>
</div>
</div>
</div>
これで基本的には大丈夫なのだが、このままでは下記のようになってしまう。
- http://localhost:3000/members/new に直接アクセスすると機能する
- http://localhost:3000/members にアクセスし、リンクから http://localhost:3000/members/new にアクセスすると機能しない
要するに、turbolinks 経由で遷移すると動かない。
なので app/assets/javascripts/application.js
に一手間加えてやる。
$(document).ready(function() {
$(document).on('turbolinks:render', function() {
if ($('.h-adr').length) {
new YubinBango.MicroformatDom();
}
});
});
turbolinks:render
は遷移する度に発生するので、その度に h-adr
を class に持つ要素があれば手動で実行してあげればよい。