Skip to content

Instantly share code, notes, and snippets.

@nnarhinen
Last active August 29, 2015 14:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nnarhinen/d4a092ad7b0ec4df783b to your computer and use it in GitHub Desktop.
Save nnarhinen/d4a092ad7b0ec4df783b to your computer and use it in GitHub Desktop.
How I do navigation / routing with backbone
var vent = require('./vent'),
UsersView = require('./users-view'),
UserView = require('./user-view');
module.exports = function(container) {
var activeView,
renderView = function(view) {
if (activeView) activeView.remove();
activeView = view;
container.html(view.render().el);
};
}
vent.on('navigte:users', function(userCol) {
renderView(new UsersView({collection: userCol}));
Backbone.history.navigate('/users');
});
vent.on('navigate:user', function(model) {
renderView(new UserView({model: model}));
Backbone.history.navigate('/users/' + model.id);
});
};
var Backbone = require('backbone'),
vent = require('./vent'),
UserCollection = require('./user-collection'),
UserModel = require('./user-model');
var MyRouter = module.exports = Backbone.Router.extend({
routes: {
'users': 'users',
'users/:id': 'oneUser'
},
users: function() {
var col = new UserCollection();
col.fetch().then(function() {
vent.trigger('navigate:users', col);
});
},
oneUser: function(id) {
var model = new UserModel({id: id});
model.fetch().then(function() {
vent.trigger('navigate:user', model);
});
}
});
var Backbone = require('backbone'),
vent = require('./vent');
module.exports = Backbone.View.extend({
events: {
'click .show-user-details': 'userDetailsLinkClicked'
},
userDetailsLinkClicked: function(ev) {
var model = fetchModelFromCollectionSomehowFromEvTarget(ev.currentTarget);
vent.trigger('navigate:user', model);
}
});
var Backbone = require('backbone'),
_ = require('underscore');
module.exports = _.extend({}, Backbone.Events);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment