大家好,
这是我第四次尝试在Rails应用程序中实现history.js。我有一种方法运行得很好,但是代码太难看了。今天我又看了看代码,想:我怎么才能让这个更好,更容易,更干燥呢?!
到目前为止,我所做的(而且工作得很好,并不完美):
remote: true设置为我的链接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-handlerajax:success上,新的URL被推送到history.js但里面还有一个问题。然后我有了JavaScript代码:
$(document).on('ajax:success', 'a[data-remote="true"]', function() { ... });问题是:如果我替换了链接(应该触发事件)的div-tag,那么就不会触发。
也许有人能解决我的问题.
还是有更好的方法?
发布于 2014-12-17 19:08:44
发布于 2013-08-07 14:25:50
那麽:
History.Adapter.bind(window, 'statechange', function() {
var state = History.getState();
...
});发布于 2013-09-10 22:40:00
我使用beforeSend事件作为所有数据的全局侦听器-远程处理来更改浏览器的历史记录。我更喜欢beforeSend,因为我希望链接在点击后立即更改,而不管ajax请求的结果如何.
$(document).bind('ajax:beforeSend', function(event,data){
history.pushState(null, '', event.target.href)
});这解决了您的问题,因为事件是在对DOM进行任何修改之前触发的。
https://stackoverflow.com/questions/10096608
复制相似问题