[model,bugfix][s]: if explicitly passed field info to a dataset use that over any field info derived from backend.

This commit is contained in:
Rufus Pollock 2013-06-02 20:04:09 +01:00
parent 26a2a36c60
commit 4d128af797
2 changed files with 26 additions and 1 deletions

View File

@ -71,7 +71,13 @@ my.Dataset = Backbone.Model.extend({
}
function handleResults(results) {
var out = self._normalizeRecordsAndFields(results.records, results.fields);
// if explicitly given the fields
// (e.g. var dataset = new Dataset({fields: fields, ...})
// use that field info over anything we get back by parsing the data
// (results.fields)
var fields = self.get('fields') || results.fields;
var out = self._normalizeRecordsAndFields(results.records, fields);
if (results.useMemoryStore) {
self._store = new recline.Backend.Memory.Store(out.records, out.fields);
}

View File

@ -177,6 +177,25 @@ test('Dataset getFieldsSummary', function () {
});
});
test('fetch without and with explicit fields', function () {
var dataset = new recline.Model.Dataset({
backend: 'csv',
data: 'A,B\n1,2\n3,4'
});
dataset.fetch();
equal(dataset.fields.at(0).id, 'A');
equal(dataset.fields.at(0).get('type'), 'string');
var dataset = new recline.Model.Dataset({
fields: [{id: 'X', type: 'number'}, {id: 'Y'}],
backend: 'csv',
data: 'A,B\n1,2\n3,4'
});
dataset.fetch();
equal(dataset.fields.at(0).id, 'X');
equal(dataset.fields.at(0).get('type'), 'number');
});
test('_normalizeRecordsAndFields', function () {
var data = [
// fields but no records