malkomalko
8/17/2009 - 8:36 PM

datasource.js

Todos.Task = SC.Record.extend({

  isDone: SC.Record.attr(Boolean),
  description: SC.Record.attr(String),
  color: SC.Record.attr(String),
  order: SC.Record.attr(Number)

}) ;
Formatted a little weird from cut-paste

{

    * rails_auth_token_name: "authenticity_token"
    * self: "/tasks"
    * rails_auth_token: "W8bgzqSwPCSQMa0FhFESa3ar/IYGI8lv6tBDURc0GkY="
    *
      -
      content: [
          o
            -
            {
                + isDone: false
                + guid: "f1fae4624a87ac3800000083"
                + order: 1
                + type: "Task"
                + description: "Brand New Task"
                +
                  -
                  options: {
                  }
            }
          o
            -
            {
                + isDone: false
                + guid: "f1fae4624a87ae2d00000083"
                + order: 1
                + type: "Task"
                + description: "Another New Task"
                +
                  -
                  options: {
                  }
            }
          o
            -
            {
                + isDone: false
                + guid: "ca78cab44a890dfc00000022"
                + color: "Red"
                + order: 1
                + fav: "Pink"
                + type: "Task"
                + description: "Isn't this just wonderful?"
                +
                  -
                  options: [
                      # "option1"
                      # "option2"
                      # "option3"
                  ]
            }
          o
            -
            {
                + guid: "5a2b404b4a896bd9000000a2"
                + type: "Task"
                + awesomeFactor: 5
                + description: "Why doesn't this update?"
                +
                  -
                  summary: {
                      #
                        -
                        bees: [
                            * "four"
                            * "five"
                            * "six"
                        ]
                      #
                        -
                        plants: [
                            * "one"
                            * "two"
                            * "three"
                        ]
                  }
            }
          o
            -
            {
                + isDone: false
                + guid: "bf839a304a898030000000fa"
                + order: 1
                + type: "Task"
                + description: "A lovely new task"
            }
          o
            -
            {
                + isDone: false
                + guid: "bf839a304a89808d000000fa"
                + order: 1
                + type: "Task"
                + description: "This is a renamed task!"
            }
          o
            -
            {
                + isDone: false
                + guid: "bf839a304a8980b3000000fa"
                + order: 1
                + type: "Task"
                + description: "A new note for life!"
            }
          o
            -
            {
                + isDone: false
                + guid: "bf839a304a89810f000000fa"
                + order: 1
                + type: "Task"
                + description: "A new task is a wonderful thing right?"
            }
          o
            -
            {
                + isDone: false
                + guid: "bf839a304a89811d000000fa"
                + order: 1
                + type: "Task"
                + description: "Updating from Firefox!"
            }
          o
            -
            {
                + isDone: false
                + guid: "bf839a304a8981c0000000fa"
                + order: 1
                + type: "Task"
                + description: "A new task to update!"
            }
      ]

}
var initialLoad = Todos.store.findAll(Todos.Task);
Todos.tasksController.set('content', initialLoad);
>>> results
[Object isDone=false guid=f1fae4624a87ac3800000083 order=1, Object isDone=false guid=f1fae4624a87ae2d00000083 order=1, Object isDone=false guid=ca78cab44a890dfc00000022, Object guid=5a2b404b4a896bd9000000a2 type=Task, Object isDone=false guid=bf839a304a898030000000fa order=1, Object isDone=false guid=bf839a304a89808d000000fa order=1, Object isDone=false guid=bf839a304a8980b3000000fa order=1, Object isDone=false guid=bf839a304a89810f000000fa order=1, Object isDone=false guid=bf839a304a89811d000000fa order=1, Object isDone=false guid=bf839a304a8981c0000000fa order=1]
>>> lenresults
10
>>> results.objectAt(3)
Object guid=5a2b404b4a896bd9000000a2 type=Task
>>> results.objectAt(3).summary.plants.objectAt(1)
"two"
SC.RailsDataSource = SC.DataSource.extend( {    
  
  requestCounter:0,
  cancelStoreKeys:{},

  fetch: function(store, fetchKey, params) {
    var ret = [], url;
    var action={};
    
    if (params) {
      var r = SC.Request.getUrl(store.resourcePath+"?"+params).set('isJSON', YES);
    } else {
      var r = SC.Request.getUrl(store.resourcePath).set('isJSON', YES);
    }
  
    r.notify(this, this.fetchDidComplete, { 
      store: store, fetchKey: fetchKey, storeKeyArray: ret
      }
    ).header('content-type', 'application/json').send();
  
    return ret;
  },
  
  fetchDidComplete: function(r, params) {     
    var hashes= [], storeKeys= [], store, fetchKey, ret, primaryKey,
      response, results, lenresults, idx;

    response = r.response();
    
    if (response.rails_auth_token_name) {
      SC.RAILS_AUTH_TOKEN_NAME = response.rails_auth_token_name;
      SC.RAILS_AUTH_TOKEN = response.rails_auth_token;
    }

    if (response.kindOf ? response.kindOf(SC.Error) : false) {
      this.requestDidError(r);
    } else {
      fetchKey = params.fetchKey;
      storeKeys = params.store.loadRecords(fetchKey, response.content);
      params.storeKeyArray.replace(0,0,storeKeys);
      results = response.content;
      lenresults = results.length;
    }
    
    debugger;
    return YES;   
  },