update ember

This commit is contained in:
Sven Fuchs 2012-07-17 00:31:53 +02:00
parent 7eeb44a9f5
commit 431deae0c6
2 changed files with 1318 additions and 1347 deletions

View File

@ -1387,6 +1387,10 @@ DS.Store = Ember.Object.extend({
return array; return array;
}, },
recordIsLoaded: function(type, id) {
return !Ember.none(this.typeMapFor(type).idToCid[id]);
},
// ............ // ............
// . UPDATING . // . UPDATING .
// ............ // ............
@ -2387,7 +2391,7 @@ var DirtyState = DS.State.extend({
errors = get(record, 'errors'), errors = get(record, 'errors'),
key = context.key; key = context.key;
delete errors[key]; set(errors, key, null);
if (!hasDefinedProperties(errors)) { if (!hasDefinedProperties(errors)) {
manager.send('becameValid'); manager.send('becameValid');
@ -3172,6 +3176,7 @@ var storeAlias = function(methodName) {
}; };
DS.Model.reopenClass({ DS.Model.reopenClass({
isLoaded: storeAlias('recordIsLoaded'),
find: storeAlias('find'), find: storeAlias('find'),
filter: storeAlias('filter'), filter: storeAlias('filter'),
@ -3699,34 +3704,132 @@ Ember.onLoad('application', function(app) {
(function() { (function() {
DS.fixtureAdapter = DS.Adapter.create({ var get = Ember.get;
find: function(store, type, id) {
var fixtures = type.FIXTURES;
Ember.assert("Unable to find fixtures for model type "+type.toString(), !!fixtures); DS.FixtureAdapter = DS.Adapter.extend({
if (fixtures.hasLoaded) { return; }
setTimeout(function() { simulateRemoteResponse: true,
store.loadMany(type, fixtures);
fixtures.hasLoaded = true; latency: 50,
}, 300);
/*
Implement this method in order to provide data associated with a type
*/
fixturesForType: function(type) {
return type.FIXTURES ? Ember.A(type.FIXTURES) : null;
}, },
findMany: function() { /*
this.find.apply(this, arguments); Implement this method in order to query fixtures data
*/
queryFixtures: function(fixtures, query) {
return fixtures;
},
/*
Implement this method in order to provide provide json for CRUD methods
*/
mockJSON: function(type, record) {
return record.toJSON({associations: true});
},
/*
Adapter methods
*/
generateIdForRecord: function(store, record) {
return Ember.guidFor(record);
},
find: function(store, type, id) {
var fixtures = this.fixturesForType(type);
if (fixtures) {
fixtures = fixtures.findProperty('id', id);
}
Ember.assert("Unable to find fixtures for model type "+type.toString(), !!fixtures);
this.simulateRemoteCall(function() {
store.load(type, fixtures);
}, store, type);
},
findMany: function(store, type, ids) {
var fixtures = this.fixturesForType(type);
if (fixtures) {
fixtures = fixtures.filter(function(item) {
return ids.indexOf(item.id) !== -1;
});
}
Ember.assert("Unable to find fixtures for model type "+type.toString(), !!fixtures);
this.simulateRemoteCall(function() {
store.loadMany(type, fixtures);
}, store, type);
}, },
findAll: function(store, type) { findAll: function(store, type) {
var fixtures = type.FIXTURES; var fixtures = this.fixturesForType(type);
Ember.assert("Unable to find fixtures for model type "+type.toString(), !!fixtures); Ember.assert("Unable to find fixtures for model type "+type.toString(), !!fixtures);
var ids = fixtures.map(function(item, index, self){ return item.id; }); this.simulateRemoteCall(function() {
store.loadMany(type, ids, fixtures); store.loadMany(type, fixtures);
} }, store, type);
},
findQuery: function(store, type, query, array) {
var fixtures = this.fixturesForType(type);
fixtures = this.queryFixtures(fixtures, query);
Ember.assert("Unable to find fixtures for model type "+type.toString(), !!fixtures);
this.simulateRemoteCall(function() {
array.load(fixtures);
}, store, type);
},
createRecord: function(store, type, record) {
var fixture = this.mockJSON(type, record);
fixture.id = this.generateIdForRecord(store, record);
this.simulateRemoteCall(function() {
store.didCreateRecord(record, fixture);
}, store, type, record);
},
updateRecord: function(store, type, record) {
var fixture = this.mockJSON(type, record);
this.simulateRemoteCall(function() {
store.didUpdateRecord(record, fixture);
}, store, type, record);
},
deleteRecord: function(store, type, record) {
this.simulateRemoteCall(function() {
store.didDeleteRecord(record);
}, store, type, record);
},
/*
@private
*/
simulateRemoteCall: function(callback, store, type, record) {
if (get(this, 'simulateRemoteResponse')) {
setTimeout(callback, get(this, 'latency'));
} else {
callback();
}
}
}); });
DS.fixtureAdapter = DS.FixtureAdapter.create();
})(); })();

File diff suppressed because it is too large Load Diff