大家好,
现在是我第四次尝试在 Rails 应用程序中实现 history.js。我有一种方法运行得很好,但是代码太丑了。今天我再次查看代码并想:我怎样才能使它更好,更容易,更干?!
到目前为止我所做的(并且工作得很好,并不完美):
- 设置
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
为我的链接 - 当一个链接被点击时,它会获取一些
js.erb
替换content
-div - 所有链接
data-remote="true"
都将获得一个ajax:success
-handler - 在
ajax:success
新 URL 上被推送到 history.js
但是里面还有一个问题。然后我有 JavaScript 代码:
$(document).on('ajax:success', 'a[data-remote="true"]', function() { ... });
问题是:ajax:success
如果我替换div
链接(应该触发事件)所在的 -tag,则永远不会触发。
也许有人可以解决我的问题...