【发布时间】:2012-04-10 21:17:37
【问题描述】:
大家好,
这是我第四次尝试在 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() { ... });
问题是:如果我替换链接(应该触发事件)所在的div-tag,ajax:success 永远不会触发。
也许有人可以解决我的问题...
或者有更好的方法吗?
【问题讨论】:
-
我已经多次查看 histoy.js 页面,但从未努力尝试过。我很想看到这个问题得到清晰的回答。
-
PJAX 仅支持 HTML5。 HTML4 浏览器只是获得普通链接......使用 history.js 我们也可以获得用于 HTML4 浏览器的 AJAX
-
但也许 PJAX 代码确实是答案,唯一的区别应该是,PJAX 使用 history.pushState 而我必须使用 History.pushState ;) 我会看看这个明天
-
您找到解决方案了吗?您首先遵循什么教程来提出这个问题?谢谢!
-
嗨,我没有遵循真正的教程。我刚刚获取了有关 history.js 的所有信息并将它们组合起来;)对于您的第一个问题:不,仍然没有解决方案 :(