Comments (8)
When things calm down a bit, I might give this one a try. Good to get some validation that it would be useful for others as well.
from render_async.
Yes, this works great. I was able to use the jquery.appear
plugin to detect the appearance of the element, then trigger the render-async toggle event...
$("#user_comments").appear({container: "body"});
$("#user_comments").on("appear", function(event, $all_appeared_elements){ $("#user_comments").trigger("load-me"); });
I actually put this code into a global function called render_async_on_appear(selector)
to make it easy to call from anywhere in the app. Thanks for the tips on how to use the trigger functionality to achieve this!
from render_async.
Sounds like a great idea. We could add some lazy_load
flag to render_async which will do a request only when it's visible.
I love the idea, if you want to submit a PR I'd be more than glad to help out :)
from render_async.
Maybe using this library? Might be pretty quick and painless, but is a dependency so perhaps a conditional gem install or something to signify they only add this dependency if they wish to do these types of "is visible" render_async calls?
https://github.com/creativelive/appear
from render_async.
Suggestion - because we have the "refresh" event which can refresh the partial, a simple flag to inhibit the initial load of the partial would allow the developer more flexibility.
Eg.
= render_async user_comments_path(user), container_id: "user_comments", replace_container: false, lazy: true
would set up the plumbing, then later the user could fire the refresh event to load/refresh the container...
$("#user_comments").trigger("refresh");
from render_async.
We can do this even with the toggle functionality
Basically, you should be able to do the following:
<%= render_async user_comments_path(user),
container_id: "user_comments",
toggle: { selector: "#user_comments", event: "load-me" } %>
And, then you can do:
const callbackToCallOnElementVisible = () => { // I got it to work by passing this callback to the IntersectionObserver
$("#user_comments").trigger("load-me");
}
WDYT about this, @vanboom?
from render_async.
Yes - this makes sense. I might be misunderstanding the toggle feature. If we do not specify interval
the toggle event would not cause it to poll? (In many cases we want to delay loading, but cause the partial to refresh based upon the user clicking a refresh button or some other ajax event.)
from render_async.
If we do not specify interval the toggle event would not cause it to poll?
Yes, the toggle feature can be used without polling. I tried what I suggested above and it works. It might be worth to add it to the docs as an example.
from render_async.
Related Issues (20)
- 2.1.5 breaks manual trigger of click event HOT 13
- preventDefault() in toggle code interferes with other UI functionality HOT 2
- Feature idea: Render async with ActiveJob & ActionCable HOT 2
- Render_async on header HOT 2
- Duplication of injected JS for nested async templates HOT 1
- Start polling immediately option when toggle is specified HOT 1
- Manual retry based on JS event HOT 3
- Idea: only fire the AJAX request on scroll (Lazy Partials) HOT 1
- Event driven reloads. HOT 3
- Polling: vanilla js has code that runs before document has finished loading HOT 2
- Feature request: Refresh with event HOT 5
- Feature: Append or prepend content on toggle HOT 1
- Content flashes on page revisit even with Turbolinks enabled HOT 6
- render_async issues with container_id and turbolinks : not reloading or JS not firing on new visit depending on configuration HOT 5
- Add Support for Turbo HOT 3
- Add delay before performing async call HOT 4
- content_for :render_async does nothing. HOT 1
- With Caching enabled, event_name is not triggered as content_for is missing on page reload HOT 5
- Turbo: Toggable selector not executing the event_listener function set by _setUpToggle on a new visit HOT 1
- JS scripts not loading synchronously HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from render_async.