lazy loading for everybody!

pull/567/head
Justin Richer 2014-03-16 00:18:28 -04:00
parent a10761b889
commit 68580dad72
6 changed files with 164 additions and 72 deletions

View File

@ -16,6 +16,17 @@
******************************************************************************/ ******************************************************************************/
Backbone.Model.prototype.fetchIfNeeded = function(options) { Backbone.Model.prototype.fetchIfNeeded = function(options) {
var _self = this;
if (!options) {
options = {};
}
var success = options.success;
options.success = function(c, r) {
_self.isFetched = true;
if (success) {
success(c, r);
}
};
if (!this.isFetched) { if (!this.isFetched) {
return this.fetch(options); return this.fetch(options);
} else { } else {
@ -23,6 +34,17 @@ Backbone.Model.prototype.fetchIfNeeded = function(options) {
} }
}; };
Backbone.Collection.prototype.fetchIfNeeded = function(options) { Backbone.Collection.prototype.fetchIfNeeded = function(options) {
var _self = this;
if (!options) {
options = {};
}
var success = options.success;
options.success = function(c, r) {
_self.isFetched = true;
if (success) {
success(c, r);
}
};
if (!this.isFetched) { if (!this.isFetched) {
return this.fetch(options); return this.fetch(options);
} else { } else {
@ -243,6 +265,16 @@ var BlackListListView = Backbone.View.extend({
this.template = _.template($('#tmpl-blacklist-form').html()); this.template = _.template($('#tmpl-blacklist-form').html());
} }
}, },
load:function(callback) {
$('#loadingbox').show();
$('#loading').html('blacklist');
$.when(this.model.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
events: { events: {
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
@ -250,11 +282,13 @@ var BlackListListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
this.model.fetch({ $('#loadingbox').show();
success: function() { $('#loading').html('blacklist');
_self.render();
} $.when(this.model.fetchIfNeeded()).done(function() {
}); $('#loadingbox').hide('slow');
_self.render();
});
}, },
render:function (eventName) { render:function (eventName) {
@ -581,9 +615,16 @@ var AppRouter = Backbone.Router.extend({
{text:"Manage Whitelisted Sites", href:"manage/#admin/whitelists"} {text:"Manage Whitelisted Sites", href:"manage/#admin/whitelists"}
]); ]);
$('#content').html(this.whiteListListView.render().el); var view = this.whiteListListView;
this.whiteListListView.delegateEvents();
setPageTitle("Manage Whitelists"); view.load(
function() {
$('#content').html(view.render().el);
view.delegateEvents();
setPageTitle("Manage Whitelists");
}
);
}, },
@ -663,12 +704,12 @@ var AppRouter = Backbone.Router.extend({
var view = this.approvedSiteListView; var view = this.approvedSiteListView;
this.approvedSiteList.fetch({success: this.approvedSiteListView.load(
function(collection, response, options) { function(collection, response, options) {
$('#content').html(view.render().el); $('#content').html(view.render().el);
setPageTitle("Manage Approved Sites"); setPageTitle("Manage Approved Sites");
} }
}); );
}, },
@ -681,16 +722,13 @@ var AppRouter = Backbone.Router.extend({
var view = this.tokensListView; var view = this.tokensListView;
app.accessTokensList.fetch({ view.load(
success:function(collection, response, options) { function(collection, response, options) {
app.refreshTokensList.fetch({ $('#content').html(view.render().el);
success:function(collection, response, options) { setPageTitle("Manage Active Tokens");
$('#content').html(view.render().el); }
setPageTitle("Manage Active Tokens"); );
}
});
}
});
}, },
notImplemented:function(){ notImplemented:function(){
@ -716,13 +754,12 @@ var AppRouter = Backbone.Router.extend({
var view = this.blackListListView; var view = this.blackListListView;
this.blackListList.fetch({success: view.load(
function(collection, response, options) { function(collection, response, options) {
$('#content').html(view.render().el); $('#content').html(view.render().el);
setPageTitle("Manage Blacklist"); setPageTitle("Manage Blacklist");
} }
}); );
}, },
siteScope:function() { siteScope:function() {
@ -738,9 +775,13 @@ var AppRouter = Backbone.Router.extend({
{text:"Manage System Scopes", href:"manage/#admin/scope"} {text:"Manage System Scopes", href:"manage/#admin/scope"}
]); ]);
$('#content').html(this.systemScopeListView.render().el); var view = this.systemScopeListView;
this.systemScopeListView.delegateEvents();
setPageTitle("Manage System Scopes"); view.load(function() {
$('#content').html(view.render().el);
view.delegateEvents();
setPageTitle("Manage System Scopes");
});
}, },

View File

@ -236,20 +236,16 @@ var ClientListView = Backbone.View.extend({
}, },
load:function(callback) { load:function(callback) {
var cleanup = function() { $('#loadingbox').show();
$('#loadingbox').hide('slow');
callback();
}
$('#loadingbox').show('slow');
$('#loading').html('clients'); $('#loading').html('clients');
$.when(this.model.fetchIfNeeded(), $.when(this.model.fetchIfNeeded(),
this.options.whiteListList.fetchIfNeeded(), this.options.whiteListList.fetchIfNeeded(),
this.options.stats.fetchIfNeeded(), this.options.stats.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(cleanup); this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
//this.model.fetchIfNeeded({success:cleanup}); callback();
});
}, },
@ -297,15 +293,12 @@ var ClientListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
_self.model.fetch({ $.when(this.model.fetchIfNeeded(),
success: function() { this.options.whiteListList.fetchIfNeeded(),
_self.options.stats.fetch({ this.options.stats.fetchIfNeeded(),
success: function () { this.options.systemScopeList.fetchIfNeeded()).done(function() {
_self.render(); _self.render();
}
}); });
}
});
} }
}); });

View File

@ -35,6 +35,18 @@ var ApprovedSiteListView = Backbone.View.extend({
tagName: 'span', tagName: 'span',
initialize:function() { }, initialize:function() { },
load:function(callback) {
$('#loadingbox').show();
$('#loading').html('approved sites');
$.when(this.model.fetchIfNeeded(),
this.options.clientList.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
events: { events: {
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
@ -94,11 +106,15 @@ var ApprovedSiteListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
this.model.fetch({ $('#loadingbox').show();
success: function() { $('#loading').html('approved sites');
_self.render();
} $.when(this.model.fetch(),
}); this.options.clientList.fetch(),
this.options.systemScopeList.fetch()).done(function() {
$('#loadingbox').hide('slow');
_self.render();
});
} }
}); });
@ -120,7 +136,7 @@ var ApprovedSiteView = Backbone.View.extend({
}, },
render: function() { render: function() {
var creationDate = this.model.get("creationDate"); var creationDate = this.model.get("creationDate");
var accessDate = this.model.get("accessDate"); var accessDate = this.model.get("accessDate");

View File

@ -134,7 +134,17 @@ var SystemScopeView = Backbone.View.extend({
var SystemScopeListView = Backbone.View.extend({ var SystemScopeListView = Backbone.View.extend({
tagName: 'span', tagName: 'span',
events:{ load:function(callback) {
$('#loadingbox').show();
$('#loading').html('approved sites');
$.when(this.model.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
events:{
"click .new-scope":"newScope", "click .new-scope":"newScope",
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
}, },
@ -146,11 +156,13 @@ var SystemScopeListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
this.model.fetch({ $('#loadingbox').show();
success: function() { $('#loading').html('approved sites');
_self.render();
} $.when(this.model.fetch()).done(function() {
}); $('#loadingbox').hide('slow');
_self.render();
});
}, },
togglePlaceholder:function() { togglePlaceholder:function() {

View File

@ -311,17 +311,31 @@ var TokenListView = Backbone.View.extend({
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
}, },
refreshTable:function() { load:function(callback) {
var _self = this; $('#loadingbox').show();
_self.model.access.fetch({ $('#loading').html('tokens');
success: function() {
_self.model.refresh.fetch({ $.when(this.model.access.fetchIfNeeded(),
success:function() { this.model.refresh.fetchIfNeeded(),
_self.render(); this.options.clientList.fetchIfNeeded(),
} this.options.systemScopeList.fetchIfNeeded()).done(function() {
}) $('#loadingbox').hide('slow');
} callback();
}); });
},
refreshTable:function() {
$('#loadingbox').show();
$('#loading').html('tokens');
var _self = this;
$.when(this.model.access.fetch(),
this.model.refresh.fetch(),
this.options.clientList.fetch(),
this.options.systemScopeList.fetch()).done(function(){
_self.render();
$('#loadingbox').hide('slow');
});
}, },
togglePlaceholder:function() { togglePlaceholder:function() {

View File

@ -50,7 +50,19 @@ var WhiteListListView = Backbone.View.extend({
//this.model.bind("reset", this.render, this); //this.model.bind("reset", this.render, this);
}, },
events:{ load:function(callback) {
$('#loadingbox').show();
$('#loading').html('whitelist');
$.when(this.model.fetchIfNeeded(),
this.options.clientList.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
events:{
"click .refresh-table":"refreshTable" "click .refresh-table":"refreshTable"
}, },
@ -86,11 +98,15 @@ var WhiteListListView = Backbone.View.extend({
refreshTable:function() { refreshTable:function() {
var _self = this; var _self = this;
this.model.fetch({ $('#loadingbox').show();
success: function() { $('#loading').html('whitelist');
_self.render();
} $.when(this.model.fetchIfNeeded(),
}); this.options.clientList.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
_self.render();
});
} }
}); });