makeFindAll

  • function
 

can.Model.makeFindAll: function(findAllData) -> findAll

Returns the external findAll method given the implemented findAllData function.

Parameters

  1. {findAllData(params)}

    findAll is implemented with a String, ajax settings object, or findAllData function. If it is implemented as a String or ajax settings object, those values are used to create a findAllData function.

    The findAllData function is passed to makeFindAll. makeFindAll should use findAllData internally to get the raw data for the request.

Returns

{function(params, success, error)}

Returns function that implements the external API of findAll.

Use

makeFindAll can be used to implement base models that perform special behavior. makeFindAll is passed a findAllData function that retrieves raw data. It should return a function that when called, uses the findAllData function to get the raw data, convert them to model instances with models.

Caching

The following uses makeFindAll to create a base CachedModel:

CachedModel = can.Model.extend({
  makeFindAll: function(findAllData){
    // A place to store requests
    var cachedRequests = {};

    return function(params, success, error){
      // is this not cached?
      if(! cachedRequests[JSON.stringify(params)] ) {
        var self = this;
        // make the request for data, save deferred
        cachedRequests[JSON.stringify(params)] =
          findAllData(params).then(function(data){
            // convert the raw data into instances
            return self.models(data)
          })
      }
      // get the saved request
      var def = cachedRequests[JSON.stringify(params)]
      // hookup success and error
      def.then(success,error)
      return def;
    }
  }
},{})

The following Todo model will never request the same list of todo's twice:

Todo = CachedModel({
  findAll: "/todos"
},{})

// widget 1
Todo.findAll({})

// widget 2
Todo.findAll({})