Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==========================================================================
- // Project: Blog.NewsDataSource
- // Copyright: ©2010 My Company, Inc.
- // ==========================================================================
- /*globals Blog */
- /** @class
- (Document Your Data Source Here)
- @extends SC.DataSource
- */
- sc_require('models/news');
- Blog.NEWS_QUERY = SC.Query.local(Blog.News, {orderBy: 'id' });
- Blog.NewsDataSource = SC.DataSource.extend(
- /** @scope Blog.NewsDataSource.prototype */ {
- // ..........................................................
- // QUERY SUPPORT
- //
- fetch: function(store, query) {
- if (query === Blog.NEWS_QUERY) {
- SC.Request.getUrl('/news.json').header({
- 'Accept': 'application/json'
- }).json().notify(this, 'didFetchQuery', store, query).send();
- return YES;
- }
- return NO;
- },
- // ..........................................................
- // RECORD SUPPORT
- //
- didFetchQuery: function(response, store, query) {
- var storeKeys = store.loadRecords(Blog.News,
- Blog.TaskJSONProxy.normalize_task_data(response.get('body')));
- if(SC.ok(response)) {
- console.debug('didFetchTasks');
- store.loadRecords(query.primaryKey, response.get('body'));
- store.dataSourceDidFetchQuery(query);
- } else store.dataSourceDidErrorQuery(query, response);
- },
- retrieveRecord: function(store, storeKey) {
- console.debug('retrieveRecord');
- if (SC.kindOf(store.recordTypeFor(storeKey), Blog.News)) {
- var url = store.idFor(storeKey);
- console.log(url);
- SC.Request.getUrl(url).header({
- 'Accept': 'application/json'
- }).json()
- .notify(this, 'didRetrieveTask', store, storeKey)
- .send();
- return YES;
- } else return NO;
- },
- didRetrieveTask: function(response, store, storeKey) {
- if (SC.ok(response)) {
- console.debug('true');
- var dataHash = response.get('body');
- store.dataSourceDidComplete(storeKey, dataHash);
- } else store.dataSourceDidError(storeKey, response);
- },
- createRecord: function(store, storeKey) {
- if (SC.kindOf(store.recordTypeFor(storeKey), Blog.News)) {
- SC.Request.postUrl('/news.json').header({
- 'Accept': 'application/json'
- }).json()
- .notify(this, this.didCreateTask, store, storeKey)
- .send(store.readDataHash(storeKey));
- return YES;
- } else return NO;
- },
- didCreateTask: function(response, store, storeKey) {
- if (SC.ok(response)) {
- // Adapted from parseUri 1.2.2
- // (c) Steven Levithan <stevenlevithan.com>
- // MIT License
- var parser = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
- var url = parser.exec(response.header('Location'))[8];
- store.dataSourceDidComplete(storeKey, null, url); // update url
- } else store.dataSourceDidError(storeKey, response);
- },
- updateRecord: function(store, storeKey) {
- if (SC.kindOf(store.recordTypeFor(storeKey), Blog.News)) {
- SC.Request.putUrl(store.idFor(storeKey)).header({
- 'Accept': 'application/json'
- }).json()
- .notify(this, this.didUpdateTask, store, storeKey)
- .send(store.readDataHash(storeKey));
- return YES;
- } else return NO ;
- },
- didUpdateTask: function(response, store, storeKey) {
- if (SC.ok(response)) {
- //var data = response.get('body');
- //if (data) data = data.content; // if hash is returned; use it.
- store.dataSourceDidComplete(storeKey,response.get('body')) ;
- } else store.dataSourceDidError(storeKey);
- },
- destroyRecord: function(store, storeKey) {
- // TODO: Add handlers to destroy records on the data source.
- // call store.dataSourceDidDestroy(storeKey) when done
- return NO ; // return YES if you handled the storeKey
- },
- _urlFor: function(resourceName, id) {
- if(id) {
- return '/app/' + resourceName + 's/' + id + '.json';
- } else {
- return '/app/' + resourceName + 's.json';
- }
- }
- }) ;
Add Comment
Please, Sign In to add comment