• function



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

Returns the external findAll method given the implemented findAllData function.

can.Model.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.


{function(params, success, error)}

Returns function that implements the external API of findAll.


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.


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)] = 
            // convert the raw data into instances
            return self.models(data)
      // get the saved request
      var def = cachedRequests[JSON.stringify(params)]
      // hookup success and error
      return def;

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

Todo = CachedModel({
  findAll: "/todos"

// widget 1

// widget 2