首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rails中正确地进行history.js?

如何在Rails中正确地进行history.js?
EN

Stack Overflow用户
提问于 2012-04-10 21:17:37
回答 4查看 2.3K关注 0票数 5

大家好,

这是我第四次尝试在Rails应用程序中实现history.js。我有一种方法运行得很好,但是代码太难看了。今天我又看了看代码,想:我怎么才能让这个更好,更容易,更干燥呢?!

到目前为止,我所做的(而且工作得很好,并不完美):

  • remote: true设置为我的链接
  • jquery获取js.erb

我的HTML看起来像:

代码语言:javascript
复制
<body>
  <div id="content">
    some content with buttons, etc.
  </div>
</body>

js.erb包含:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
$(document).on('ajax:success', 'a[data-remote="true"]', function() { ... });

问题是:如果我替换了链接(应该触发事件)的div-tag,那么就不会触发。

也许有人能解决我的问题.

还是有更好的方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-17 19:08:44

我只使用jquery和pushState,popState。

请看我的回答:

https://stackoverflow.com/a/27532946/345996

票数 2
EN

Stack Overflow用户

发布于 2013-08-07 14:25:50

那麽:

代码语言:javascript
复制
History.Adapter.bind(window, 'statechange', function() {
    var state = History.getState();
    ...
});
票数 0
EN

Stack Overflow用户

发布于 2013-09-10 22:40:00

我使用beforeSend事件作为所有数据的全局侦听器-远程处理来更改浏览器的历史记录。我更喜欢beforeSend,因为我希望链接在点击后立即更改,而不管ajax请求的结果如何.

代码语言:javascript
复制
$(document).bind('ajax:beforeSend', function(event,data){
    history.pushState(null, '', event.target.href)
});

这解决了您的问题,因为事件是在对DOM进行任何修改之前触发的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10096608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档