Is there a way around writing data: {turbolinks: f

2019-03-04 17:24发布

turbolinks (5.0.0)
Rails 4.2.2

Is there DRY to make every link_to in your app data: {turbolinks: false} ? or does that defeat the purpose of Turbolinks and suggest that it should just be removed?

A large number of my jquery scripts will not work correctly if a link is clicked unless it contains data: {turbolinks: false }, the scripts will work correctly when the page is reloaded.

I have my jquery wrapped in: $(document).on('turbolinks:load', function () { #something here});

1条回答
ゆ 、 Hurt°
2楼-- · 2019-03-04 17:37

So, the question you asked was "how to DRY up my endless link annotations?" I'll answer that, first...

Yes, if you turbolinks: false everything, then yes, you should just remove Turbolinks. Not because it's DRY, but because then you're disabling Turbolinks everywhere and might as well remove it. It doesn't do anything but deal with link-clicking.

If I can be so bold, though, I think your real question is:

"How do I get these cool jQuery plugins to work? I want them, and I never really asked for Turbolinks."

Without getting into specific plugins, many of them latch onto jQuery's $ function, which attaches to DOMContentLoaded. Turbolinks fires a different event instead (in Turbolinks-Classic this was the page:load event... in Turbolinks 5 it's the turbolinks:load event, that event isn't emitted and those event handlers don't get reset.

One possible answer for how to structure your JavaScript initializers is here.

I personally have stuck with Turbolinks, and as one last pitch, I'll point you towards Nate Berkopec's article 100ms to Glass with Rails and Turbolinks. He makes a reasonable case for why Turbolinks is a Good Thing.

查看更多
登录 后发表回答