Backbone-ModelRef.js provides a mechanism to respond to lazy-loaded Backbone.js models.
CoffeeScript JavaScript
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
packages Rebuild Nov 25, 2013
src Minor tweaks to reduce CoffeeScript noise Sep 18, 2012
test Update Nov 25, 2013
.gitignore Published on bower Mar 31, 2013
.travis.yml Update CI Sep 12, 2012 Update dependent libraries Mar 26, 2013
LICENSE Upgraded to easy-bake Jun 2, 2012 Update Sep 17, 2012 Added AMD module loader Sep 14, 2012
backbone-modelref.js Rebuild Nov 25, 2013
backbone-modelref.min.js Update dependent libraries Mar 26, 2013
component.json Published on bower Mar 31, 2013
package.json Rebuild Nov 25, 2013

Build Status

|_) _. _ | |_  _ ._  _ __ |\/| _  _| _ ||_) _ _|_
|_)(_|(_ |<|_)(_)| |(/_   |  |(_)(_|(/_|| \(/_ |

Backbone-ModelRef.js provides a mechanism to respond to lazy-loaded Backbone.js models.

#Download Latest (0.1.5):

Please see the release notes for upgrade pointers.

###Module Loading

Backbone-ModelRef.js is compatible with RequireJS, CommonJS, Brunch and AMD module loading. Module names:

  • 'backbone-modelref' - backbone-modelref.js.


An Example:

  class MyView extends Backbone.View
    constructor: (@model_ref) ->
      super; _.bindAll(this, 'render', 'renderWaiting')
      @model_ref.bind('loaded', @render); @model_ref.bind('unloaded', @renderWaiting)
      if @model_ref.isLoaded() then @render() else @renderWaiting()

    render: -> @is_waiting = false
    renderWaiting: -> @is_waiting = true

  collection = new MyCollection()
  view = new MyView(new Backbone.ModelRef(collection, 'dog')) # view is now rendering in waiting state
  collection.add(collection.parse([{id: 'dog'}]))             # view is now rendering in loaded state


Backbone.ModelRef: This is the only class! It just wraps a collection and a model id, and tells you when the model is loaded and unloaded.

API Signature Parity between Backbone.Model and Backbone.ModelRef

Function Backbone.Model Backbone.ModelRef
get(attribute_name) returns model.get(attribute_name) returns the model id only and throws an exception otherwise
model() returns this returns its model if it is loaded or null if not
isLoaded() returns true returns true if its model is loaded and false otherwise
bindLoadingStates( loaded_fn or {loaded:fn, unloaded:fn} ) loaded function called one time (immediately) and unloaded function never called. No Backbone.Event binding occurs loaded function called immediately if the model is loaded otherwise they are bound using Backbone.Events 'loaded' and 'unloaded' where each is called when the model is loaded or unloaded, respectively
unbindLoadingStates( loaded_fn or {loaded:fn, unloaded:fn} ) ignored unbinds Backbone.Events 'loaded' and 'unloaded'

Other notes:

  • Backbone.ModelRefs are reference counted so use retain() and release() to properly ensure non-dangling pointers.
  • You can optionally provide an function Backbone.Model.isLoaded() id you have custom loading checks like for lazy-loaded Backbone.Relational models.
  • You can optionally provide a reference counted collection (implementing retain() and release()).

Please look at the provided examples and specs for sample code:

Building, Running and Testing the library


  1. install node.js:
  2. install node packages: 'npm install'


Look at: