# backbone.promise-controller

> A Simple Promise Based Controller For Backbone/Marionette Views

Latest version **0.1.0** (published 2013-09-09) · 0 weekly downloads

## Install

```sh
npm install backbone.promise-controller
pnpm add backbone.promise-controller
yarn add backbone.promise-controller
bun add backbone.promise-controller
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.0 |
| Published | 2013-09-09 |
| First published | 2013-09-09 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Known vulnerabilities | 0 (+3 in 1 direct dependencies) |
| Install scripts | no |
| Author | Chris Miller |
| Maintainers | cmille142 |

## Links

- npm: https://www.npmjs.com/package/backbone.promise-controller
- npm.io page: https://npm.io/package/backbone.promise-controller

## Dependencies (6)

- [grunt](https://npm.io/package/grunt.md) ~0.4.1
- [grunt-contrib-copy](https://npm.io/package/grunt-contrib-copy.md) ~0.4.1
- [grunt-contrib-clean](https://npm.io/package/grunt-contrib-clean.md) ~0.4.0
- [grunt-contrib-jshint](https://npm.io/package/grunt-contrib-jshint.md) ~0.4.2
- [grunt-contrib-uglify](https://npm.io/package/grunt-contrib-uglify.md) ~0.2.0
- [grunt-contrib-jasmine](https://npm.io/package/grunt-contrib-jasmine.md) ~0.5.1

## Recent versions

- 0.1.0 (latest) — 2013-09-09

## README

Backbone.PromiseController
===========================

Backbone Promise Based Controller

A Flexible Backbone/Marionette General Purpose Controller

## Getting Started

This library is built on top of Backbone and used with Marionette, providing a Promise based controller solution.


- Example Usage:

```
  var BlogPromiseController = Backbone.PromiseController.extend({

    initialize : function (options,resolve, reject) {
        var model = options.model;

        //Ad-hoc Filtering
        var privacy = options.model.get('privacy');
        if (!privacy) reject(this.getRejection(options));

        var blogs = model.blogs();

        blogs.fetch()
          .then(function() {
            if (blogs.length) {
              resolve(this.getResolution(options,blogs));
            } else {
              reject(this.getRejection(options));
            }
          }.bind(this))
          .fail(function () {
            reject(this.getRejection(options));
          }.bind(this));
      },

      getResolution : function(options, blogs) {
        return {
          user  : options.model,
          collection : blogs
        };
      },

      getRejection : function (options) {
        return {
          user  : options.model,
          collection : null
        };
      }
  });

  var BlogController = new BlogPromiseController({
    model : new Backbone.Model({
        //...
        blogs : function() {
          //...
        }
    })
  });

  controller.then(function(model,collection) {
    //...
  });

  controller.fail(function(model,collection) {
    //...
  });

```

I use this in conjunction with **AyncViewLoader (coming soon)** to load views asynchronously while attaching them to a region on the DOM with a title and a spinner.
This creates a simple, reusable, and testable controller for loading views. Allowing you to keep the business logic out of the view logic.

### Dependencies

- Backbone - v1.0.0+

## Contributing
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using grunt.

## Release History

- 0.1.0 Initial release

## License

Licensed under the MIT license.

## Author

Chris Miller

---
_Source: https://npm.io/package/backbone.promise-controller · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
