Backbone.Giraffe is a light and flexible library that extends Backbone.js to new heights. Giraffe's goal is to follow the Backbone philosophy of unopinionated simplicity to provide commonly needed features with few assumptions. It differs from other Backbone libraries like Marionette and Chaplin in its reduced scope and size, and it takes a different approach to the problems of route handling, object lifecycles, event aggregation, and view management.
Giraffe.View is a nestable and flexible class that provides lifecycle management and many other useful features. It defaults to Underscore templates and easily supports any form of templating.
Giraffe.App is a special view that helps your views, models, collections, and routers communicate by acting as an event hub. Multiple apps can coexist and teardown is as simple as it gets.
Giraffe.Router leverages an app's events to trigger routing events that any object can listen for. It also has reverse routes to allow the construction of URLs using app events and arguments.
Giraffe.Model and Giraffe.Collection are thin wrappers that add Giraffe's lifecycle management and app events. Any object can mix in this functionality via
How Giraffe is Different
Giraffe was created by the needs of our team as we built Barc. We tried many existing libraries but some did way too much, others added too many layers, and others performed poorly.
Giraffe does not have all the bells and whistles of the larger frameworks. We found the effort to customize them for our needs was more effort than simply building upon Backbone with a minimalist approach. For example, there is no concept of specialized containers like regions or layouts, as any view in Giraffe can act as a parent of one or more child views. Giraffe also has no CollectionView or ItemView (see Giraffe.Contrib.CollectionView and Giraffe.Contrib.FastCollectionView), but we are open to suggestions to make Giraffe as useful as possible to Backbone developers who want an extension library with few opinions.
Is this framework for you? It depends. We feel Giraffe adds essential features to make you more productive with Backbone.
Routes emit events instead of being tied to functions. This makes it extremely simple for a deeply nested view to act on a route.
Reverse routes with arguments provide a way to trigger routes in the application using app events without having to know a URL path.
Giraffe.App is a special view that acts as an event hub to help your app communicate and respond to routes, and all Giraffe objects have convenient
appEventsbindings inspired by
Giraffe.View#attachTo(someElement)allows views to move anywhere on the DOM without clobbering each other's events, and it automatically sets up parent-child relationships for memory management.
Lifecycle management mitigates memory leaks. It's automatic for nested views and can be used for any object with a
(A)sync app initialization helps an app reach its ready state. For example, an app may need to wait for asynchronous bootstrap data or a websocket connection before starting.
Declarative event handling in markup provides simple one-way binding. (does not try to be Knockout or AngularJS)
Optional Giraffe.Contrib extensions include a simple Controller class with Giraffe's lifecycle and
appEventsfeatures, a CollectionView that renders a collection with a view per model, and a FastCollectionView that renders a collection with a single view more efficiently than Giraffe.Contrib.CollectionView and Marionette.CollectionView.
- Fixed AMD loader.
Contribnow attaches itself as
root.GiraffeContribin addition to the existing
- Fixed module loader for r.js optimizer.
Configured objects (including all Giraffe objects) now have the following no-op function hooks for you to implement:
Disposed objects have a new property
- Support optional params for Router#isCaused and Router#cause. Optional static routes remain unsupported. See issue 19 for more.
- Contrib can now be required from the root:
- All invariants now throw errors instead of logging.
- Allow passing routing options to Giraffe.Router#cause.
- Fixed support for 0 as a path param.
- Added Backbone and Underscore CommonJS requires to Giraffe.Contrib.
- Fixed AMD loader check.
Added support for AMD and node-style loaders.
Put contributors in one place, the AUTHORS file.
Using accurate semantic versioning, starting...now.
Added events around several view methods:
disposenow acts on
thisinstead of taking the target object as an argument. Removed
disposeThisas it's now redundant.
Registered as a Bower package:
bower install backbone.giraffe
Added the function
Giraffe.configurewhich mixes several Giraffe features into any object. Used in the constructors of all Giraffe objects.
omittedOptionscan be used to prevent
Giraffe.configurefrom extending particular properties. If the value is
true, all properties are omitted.
The document event prefix
'data-gf-'is now configurable via
Giraffe.View.setDocumentEventPrefixand as a parameter to
disposeis now mixed into configured objects with a default function, and is only copied if it doesn't exist. As a result, calls to super in
disposeno longer make sense. Use
afterInitializeare called if defined on all configured objects. Some are used by Giraffe objects so override with care.
Giraffe.wrapFnwhich calls 'beforeFnName' and 'afterFnName' versions of a function name on an object. Here's a reference for future development - Backbone.Advice
Suggestions and pull requests are welcome!
Copyright (c) 2013 Barc Inc.
See the file LICENSE for copying permission.