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) {
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) {
return this.fetch(options);
} else {
@ -23,6 +34,17 @@ Backbone.Model.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) {
return this.fetch(options);
} else {
@ -243,6 +265,16 @@ var BlackListListView = Backbone.View.extend({
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: {
"click .refresh-table":"refreshTable"
@ -250,11 +282,13 @@ var BlackListListView = Backbone.View.extend({
refreshTable:function() {
var _self = this;
this.model.fetch({
success: function() {
_self.render();
}
});
$('#loadingbox').show();
$('#loading').html('blacklist');
$.when(this.model.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
_self.render();
});
},
render:function (eventName) {
@ -581,9 +615,16 @@ var AppRouter = Backbone.Router.extend({
{text:"Manage Whitelisted Sites", href:"manage/#admin/whitelists"}
]);
$('#content').html(this.whiteListListView.render().el);
this.whiteListListView.delegateEvents();
setPageTitle("Manage Whitelists");
var view = this.whiteListListView;
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;
this.approvedSiteList.fetch({success:
this.approvedSiteListView.load(
function(collection, response, options) {
$('#content').html(view.render().el);
setPageTitle("Manage Approved Sites");
}
});
);
},
@ -681,16 +722,13 @@ var AppRouter = Backbone.Router.extend({
var view = this.tokensListView;
app.accessTokensList.fetch({
success:function(collection, response, options) {
app.refreshTokensList.fetch({
success:function(collection, response, options) {
$('#content').html(view.render().el);
setPageTitle("Manage Active Tokens");
}
});
}
});
view.load(
function(collection, response, options) {
$('#content').html(view.render().el);
setPageTitle("Manage Active Tokens");
}
);
},
notImplemented:function(){
@ -716,13 +754,12 @@ var AppRouter = Backbone.Router.extend({
var view = this.blackListListView;
this.blackListList.fetch({success:
view.load(
function(collection, response, options) {
$('#content').html(view.render().el);
setPageTitle("Manage Blacklist");
}
});
);
},
siteScope:function() {
@ -738,9 +775,13 @@ var AppRouter = Backbone.Router.extend({
{text:"Manage System Scopes", href:"manage/#admin/scope"}
]);
$('#content').html(this.systemScopeListView.render().el);
this.systemScopeListView.delegateEvents();
setPageTitle("Manage System Scopes");
var view = this.systemScopeListView;
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) {
var cleanup = function() {
$('#loadingbox').hide('slow');
callback();
}
$('#loadingbox').show('slow');
$('#loadingbox').show();
$('#loading').html('clients');
$.when(this.model.fetchIfNeeded(),
this.options.whiteListList.fetchIfNeeded(),
this.options.stats.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(cleanup);
//this.model.fetchIfNeeded({success:cleanup});
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
callback();
});
},
@ -297,15 +293,12 @@ var ClientListView = Backbone.View.extend({
refreshTable:function() {
var _self = this;
_self.model.fetch({
success: function() {
_self.options.stats.fetch({
success: function () {
_self.render();
}
$.when(this.model.fetchIfNeeded(),
this.options.whiteListList.fetchIfNeeded(),
this.options.stats.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
_self.render();
});
}
});
}
});

View File

@ -35,6 +35,18 @@ var ApprovedSiteListView = Backbone.View.extend({
tagName: 'span',
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: {
"click .refresh-table":"refreshTable"
@ -94,11 +106,15 @@ var ApprovedSiteListView = Backbone.View.extend({
refreshTable:function() {
var _self = this;
this.model.fetch({
success: function() {
_self.render();
}
});
$('#loadingbox').show();
$('#loading').html('approved sites');
$.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 accessDate = this.model.get("accessDate");

View File

@ -134,7 +134,17 @@ var SystemScopeView = Backbone.View.extend({
var SystemScopeListView = Backbone.View.extend({
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 .refresh-table":"refreshTable"
},
@ -146,11 +156,13 @@ var SystemScopeListView = Backbone.View.extend({
refreshTable:function() {
var _self = this;
this.model.fetch({
success: function() {
_self.render();
}
});
$('#loadingbox').show();
$('#loading').html('approved sites');
$.when(this.model.fetch()).done(function() {
$('#loadingbox').hide('slow');
_self.render();
});
},
togglePlaceholder:function() {

View File

@ -311,17 +311,31 @@ var TokenListView = Backbone.View.extend({
"click .refresh-table":"refreshTable"
},
refreshTable:function() {
var _self = this;
_self.model.access.fetch({
success: function() {
_self.model.refresh.fetch({
success:function() {
_self.render();
}
})
}
});
load:function(callback) {
$('#loadingbox').show();
$('#loading').html('tokens');
$.when(this.model.access.fetchIfNeeded(),
this.model.refresh.fetchIfNeeded(),
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() {

View File

@ -50,7 +50,19 @@ var WhiteListListView = Backbone.View.extend({
//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"
},
@ -86,11 +98,15 @@ var WhiteListListView = Backbone.View.extend({
refreshTable:function() {
var _self = this;
this.model.fetch({
success: function() {
_self.render();
}
});
$('#loadingbox').show();
$('#loading').html('whitelist');
$.when(this.model.fetchIfNeeded(),
this.options.clientList.fetchIfNeeded(),
this.options.systemScopeList.fetchIfNeeded()).done(function() {
$('#loadingbox').hide('slow');
_self.render();
});
}
});