皆さんこんにちは、
Rails アプリに history.js を実装するのは今回が 4 回目です。かなり問題なく動作しているアプローチが 1 つありますが、コードは非常に醜いです。今日もコードを見て考えました: どうすればこれをより良く、簡単に、より DRY にできますか?!
私がこれまでにやったこと(そして完全ではなく、かなりうまくいっています):
remote: true
マイリンクに設定- jquery-ujs は
js.erb
私のHTMLは次のようになります:
<body>
<div id="content">
some content with buttons, etc.
</div>
</body>
含まれるjs.erb
もの:
History.pushState(
{
func: '$(\'#content\').html(data);',
data: '<%= j(render template: "news/index", formats: [:html]) %>'
},
'test title',
'<%= request.url %>'
);
そして、history.js が関数を受け取り、データを渡します。したがって、content
-div を新しく生成されたコードに置き換えます。また、URL も更新します。このコードは、すべての (!)js.erb
ファイルに入れる必要があります。
少し見苦しくないようにするための私の最後の考えは次のとおりです。
remote: true
マイリンクに設定- リンクがクリックされると、 -div
js.erb
を置き換えるものを取得しますcontent
- を含むすべてのリンクは-handler
data-remote="true"
を取得しますajax:success
- 新しい URL でhistory.js
ajax:success
にプッシュされます
しかし、内部にはまだ1つの問題があります。次に、JavaScript コードがあります。
$(document).on('ajax:success', 'a[data-remote="true"]', function() { ... });
問題は、リンク (イベントを発生させる必要がある) があった -tagajax:success
を置き換えると、決して発生しないことです。div
誰かが私の問題を解決してくれるかもしれません...