[#128,misc][s]: final wiring up to have everything working again -- fixes #128.
This commit is contained in:
@@ -157,7 +157,7 @@
|
||||
<select name="backend_type">
|
||||
<option value="csv">CSV</option>
|
||||
<option vlaue="excel">Excel</option>
|
||||
<option value="gdoc">Google Spreadsheet</option>
|
||||
<option value="gdocs">Google Spreadsheet</option>
|
||||
<option value="elasticsearch">ElasticSearch</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@@ -6,15 +6,10 @@
|
||||
this.recline = this.recline || {};
|
||||
this.recline.Backend = this.recline.Backend || {};
|
||||
|
||||
(function($, my) {
|
||||
// ## recline.Backend.Base
|
||||
//
|
||||
// Base class for backends providing a template and convenience functions.
|
||||
// You do not have to inherit from this class but even when not it does
|
||||
// provide guidance on the functions you must implement.
|
||||
//
|
||||
// Note also that while this (and other Backends) are implemented as Backbone models this is just a convenience.
|
||||
my.Base = Backbone.Model.extend({
|
||||
// ## recline.Backend.Base
|
||||
//
|
||||
// Exemplar 'class' for backends showing what a base class would look like.
|
||||
this.recline.Backend.Base = function() {
|
||||
// ### __type__
|
||||
//
|
||||
// 'type' of this backend. This should be either the class path for this
|
||||
@@ -23,14 +18,13 @@ this.recline.Backend = this.recline.Backend || {};
|
||||
//
|
||||
// This value is used as an identifier for this backend when initializing
|
||||
// backends (see recline.Model.Dataset.initialize).
|
||||
__type__: 'base',
|
||||
|
||||
this.__type__ = 'base';
|
||||
|
||||
// ### readonly
|
||||
//
|
||||
// Class level attribute indicating that this backend is read-only (that
|
||||
// is, cannot be written to).
|
||||
readonly: true,
|
||||
this.readonly = true;
|
||||
|
||||
// ### sync
|
||||
//
|
||||
@@ -45,7 +39,7 @@ this.recline.Backend = this.recline.Backend || {};
|
||||
// For backends supporting write operations you must implement update and delete support for Document objects.
|
||||
//
|
||||
// All code paths should return an object conforming to the jquery promise API.
|
||||
sync: function(method, model, options) {
|
||||
this.sync = function(method, model, options) {
|
||||
},
|
||||
|
||||
// ### query
|
||||
@@ -89,21 +83,20 @@ this.recline.Backend = this.recline.Backend || {};
|
||||
// }
|
||||
// }
|
||||
// </pre>
|
||||
query: function(model, queryObj) {
|
||||
},
|
||||
this.query = function(model, queryObj) {}
|
||||
};
|
||||
|
||||
// ### _makeRequest
|
||||
//
|
||||
// Just $.ajax but in any headers in the 'headers' attribute of this
|
||||
// Backend instance. Example:
|
||||
//
|
||||
// <pre>
|
||||
// var jqxhr = this._makeRequest({
|
||||
// url: the-url
|
||||
// });
|
||||
// </pre>
|
||||
_makeRequest: function(data) {
|
||||
var headers = this.get('headers');
|
||||
// ### makeRequest
|
||||
//
|
||||
// Just $.ajax but in any headers in the 'headers' attribute of this
|
||||
// Backend instance. Example:
|
||||
//
|
||||
// <pre>
|
||||
// var jqxhr = this._makeRequest({
|
||||
// url: the-url
|
||||
// });
|
||||
// </pre>
|
||||
this.recline.Backend.makeRequest = function(data, headers) {
|
||||
var extras = {};
|
||||
if (headers) {
|
||||
extras = {
|
||||
@@ -116,70 +109,5 @@ this.recline.Backend = this.recline.Backend || {};
|
||||
}
|
||||
var data = _.extend(extras, data);
|
||||
return $.ajax(data);
|
||||
},
|
||||
|
||||
// convenience method to convert simple set of documents / rows to a QueryResult
|
||||
_docsToQueryResult: function(rows) {
|
||||
var hits = _.map(rows, function(row) {
|
||||
return { _source: row };
|
||||
});
|
||||
return {
|
||||
total: null,
|
||||
hits: hits
|
||||
};
|
||||
},
|
||||
|
||||
// ## _wrapInTimeout
|
||||
//
|
||||
// Convenience method providing a crude way to catch backend errors on JSONP calls.
|
||||
// Many of backends use JSONP and so will not get error messages and this is
|
||||
// a crude way to catch those errors.
|
||||
_wrapInTimeout: function(ourFunction) {
|
||||
var dfd = $.Deferred();
|
||||
var timeout = 5000;
|
||||
var timer = setTimeout(function() {
|
||||
dfd.reject({
|
||||
message: 'Request Error: Backend did not respond after ' + (timeout / 1000) + ' seconds'
|
||||
});
|
||||
}, timeout);
|
||||
ourFunction.done(function(arguments) {
|
||||
clearTimeout(timer);
|
||||
dfd.resolve(arguments);
|
||||
})
|
||||
.fail(function(arguments) {
|
||||
clearTimeout(timer);
|
||||
dfd.reject(arguments);
|
||||
})
|
||||
;
|
||||
return dfd.promise();
|
||||
}
|
||||
});
|
||||
|
||||
// ### makeRequest
|
||||
//
|
||||
// Just $.ajax but in any headers in the 'headers' attribute of this
|
||||
// Backend instance. Example:
|
||||
//
|
||||
// <pre>
|
||||
// var jqxhr = this._makeRequest({
|
||||
// url: the-url
|
||||
// });
|
||||
// </pre>
|
||||
my.makeRequest = function(data, headers) {
|
||||
var extras = {};
|
||||
if (headers) {
|
||||
extras = {
|
||||
beforeSend: function(req) {
|
||||
_.each(headers, function(value, key) {
|
||||
req.setRequestHeader(key, value);
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
var data = _.extend(extras, data);
|
||||
return $.ajax(data);
|
||||
};
|
||||
|
||||
|
||||
}(jQuery, this.recline.Backend));
|
||||
};
|
||||
|
||||
|
||||
@@ -44,8 +44,6 @@ my.Dataset = Backbone.Model.extend({
|
||||
initialize: function(model, backend) {
|
||||
_.bindAll(this, 'query');
|
||||
this.backend = backend;
|
||||
this.backendType = 'memory';
|
||||
this.backendURL = null;
|
||||
if (typeof(backend) === 'string') {
|
||||
this.backend = this._backendFromString(backend);
|
||||
}
|
||||
@@ -135,7 +133,7 @@ my.Dataset = Backbone.Model.extend({
|
||||
if (recline && recline.Backend) {
|
||||
_.each(_.keys(recline.Backend), function(name) {
|
||||
if (name.toLowerCase() === backendString.toLowerCase()) {
|
||||
backend = new recline.Backend[name]();
|
||||
backend = new recline.Backend[name].Backbone();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user