PageRenderTime 42ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/app/public/js/collections/tiles.js

https://bitbucket.org/dbezrukov/photoload
JavaScript | 86 lines | 64 code | 22 blank | 0 comment | 2 complexity | 3ca71ba12d2a8277bdc508d45e02aa89 MD5 | raw file
Possible License(s): Apache-2.0
  1. define([
  2. "underscore",
  3. "underscore.string",
  4. 'backbone',
  5. 'models/tile'
  6. ], function(_, _str, Backbone, Tile) {
  7. var lastQuery;
  8. var offset = 0;
  9. var somePhotosLoaded = false;
  10. return Backbone.Collection.extend({
  11. model: Tile,
  12. url: '/tiles',
  13. initialize: function(models, options) {
  14. this.users = options.users;
  15. },
  16. doFetch: function(query){
  17. var self = this;
  18. function formatDate(date) {
  19. return (date.toLocaleDateString() + ' ' + date.toLocaleTimeString());
  20. }
  21. query.offset = offset;
  22. query.count = somePhotosLoaded ? 20 : 75;
  23. var query_string = $.param(query);
  24. $.ajax({
  25. type: "GET",
  26. url: self.url,
  27. data: query_string,
  28. dataType: 'JSON',
  29. success: function(data){
  30. somePhotosLoaded = true;
  31. offset += query.count;
  32. self.trigger(data.length < query.count ? 'nomore' : 'hasmore');
  33. data.forEach(function(tile) {
  34. tile.src = '/img/kmz64.png',
  35. tile.src_preview = '/img/kmz64.png',
  36. tile.time_string = formatDate(new Date(tile.utc * 1000));
  37. var user = self.users.get(tile.userId);
  38. tile.user_name = user ? user.get('name') : 'недоступно';
  39. tile.title = tile.name;
  40. self.add(tile);
  41. });
  42. },
  43. error: function(xhr){
  44. }
  45. });
  46. },
  47. fetch: function(query_object){
  48. var self = this;
  49. offset = 0;
  50. somePhotosLoaded = false;
  51. if (query_object) {
  52. lastQuery = query_object;
  53. }
  54. self.reset();
  55. self.doFetch(lastQuery);
  56. },
  57. fetchMore: function(){
  58. var self = this;
  59. if (lastQuery) {
  60. self.doFetch(lastQuery);
  61. }
  62. }
  63. });
  64. });