PageRenderTime 39ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/mvc/controllers.js

https://github.com/dotmike/tilestream
JavaScript | 65 lines | 53 code | 3 blank | 9 comment | 2 complexity | 9449a970bf42cedcc593395f13d45587 MD5 | raw file
  1. // UI router for TileStream. The `Router` controller will handle routing for
  2. // the client-side UI as well as server-side renders for search crawlers.
  3. // Routes are registered with both a "normal" path as well as the "hashbang"
  4. // path for supporting [Google's AJAX crawling][1] recommendation.
  5. //
  6. // [1]: http://code.google.com/web/ajaxcrawling/docs/getting-started.html
  7. // Requires for the server-side context. *TODO* Note that `var` is omitted here
  8. // because even within the `if()` IE will wipe globally defined variables if
  9. // `var` is included, leaving us with broken objects.
  10. if (typeof require !== 'undefined') {
  11. _ = require('underscore')._,
  12. Backbone = require('backbone.js'),
  13. Tileset = require('models').Tileset,
  14. TilesetList = require('models').TilesetList,
  15. PageView = require('views').PageView,
  16. ErrorView = require('views').ErrorView,
  17. TilesetView = require('views').TilesetView,
  18. TilesetListView = require('views').TilesetListView;
  19. }
  20. var Router = Backbone.Controller.extend({
  21. initialize: function(options) {
  22. _.bindAll(this, 'list', 'tileset');
  23. Backbone.Controller.prototype.initialize.call(this, options);
  24. },
  25. routes: {
  26. '/': 'list',
  27. '!/': 'list',
  28. '/tileset/:id': 'tileset',
  29. '!/tileset/:id': 'tileset'
  30. },
  31. list: function(response) {
  32. var that = this;
  33. (new TilesetList()).fetch({
  34. success: function(collection) {
  35. var view = new TilesetListView({ collection: collection });
  36. response(new PageView({ view: view }));
  37. },
  38. error: function() {
  39. var view = new ErrorView({ message: 'Error loading tilesets.' });
  40. response(new PageView({ view: view }));
  41. }
  42. });
  43. },
  44. tileset: function(id, response) {
  45. var that = this;
  46. (new Tileset({ id: id })).fetch({
  47. success: function(model) {
  48. var view = new TilesetView({ model: model });
  49. response(new PageView({ view: view }));
  50. },
  51. error: function() {
  52. var view = new ErrorView({ message: 'Tileset not found.' });
  53. response(new PageView({ view: view }));
  54. }
  55. });
  56. }
  57. });
  58. if (typeof module !== 'undefined') {
  59. module.exports = {
  60. Router: Router
  61. };
  62. }