I’m building small one page application with rails 3.1 mongodb and backbonejs.
I have two resources available through json api. I created two models and collections in backbone which look like this
https://gist.github.com/1522131
also I have two seprate routers
projects router – https://gist.github.com/1522134
notes router – https://gist.github.com/1522137
I generated them with backbonejs-rails gem from github so code inside is just template. I initialize my basic router inside index.haml file
#projects
:javascript
$(function() {
window.router = new JsonApi.Routers.ProjectsRouter({projects: #{@projects.to_json.html_safe}});
new JsonApi.Routers.NotesRouter();
Backbone.history.start();
});
I don’t want fetch notes when application is starting, because there is big chance that user will never look inside notes. So there isn’t good reason to fetch it on start. Inside NotesRouter in all action I rely on @notes variable but without .fetch() method this variable is empty. Also I should can reproduce notes view from url like
/1/notes/5
project_id = 1
note_id = 5
What is best practices in backbonejs to solve this kind of problem ?
Why don’t you lazy load the notes when it’s requested? Here’s an example:
In this example, I’m defining a NoteCache object that manages the lazy loading. I also add a “state” property to the Note model and Notes collection.
You’ll probably want to initialize NoteCache somewhere (probably inside your route) and whenever you want a note or notes, just do this:
Now inside your view, you’ll want to listen for state changes in case the note/notes is not loaded yet:
I haven’t tested this, so there may be some bugs, but I hope you get the idea.