radio.service

0.6.0 • Public • Published

Radio Service

Simple service class for Backbone.

Dependency Status devDependency Status

Usage

Note: Backbone.Service requires a global Promise object to exist, please include a Promise polyfill if necessary.

import Service from 'radio.service';
 
const AuthService = Service.extend({
  start() {
    this.user = new User();
    return this.user.fetch();
  },
 
  requests: {
    isAuthenticated: 'isAuthenticated',
    authenticate: 'authenticate'
  },
 
  isAuthenticated() {
    return this.user.get('isAuthenticated');
  },
 
  authenticate() {
    this.user.authenticate();
  },
 
  onError(err) {
    console.log('Err!', err);
  }
});
 
const authService = new AuthService();
 
const Page = View.extend({
  render() {
    authService.request('isAuthenticated').then(isAuthenticated => {
      if (isAuthenticated) {
        this.$el.html('Welcome!');
        return;
      }
 
      this.$el.html('Permission denied.')
      return authService.request('authenticate').then(() => this.render());
    }).catch(err => {
      this.$el.html('Oh no!');
    });
  }
});
 
// Which would behave like you wrote all of this:
 
const Page = View.extend({
  render() {
    Promise.resolve()
      .then(() => {
        if (!authService.isStarted) {
          return authService.start().catch(err => {
            authService.onError(err);
            throw err;
          }))
        }
      })
      .then(() => authService.isAuthenticated().catch(err => {
        authService.onError(err);
        throw err;
      })))
      .then(isAuthenticated => {
        if (isAuthenticated) {
          this.$el.html('Welcome!');
          return;
        }
 
        this.$el.html('Permission denied.')
        return Promise.resolve()
          .then(() => authService.authenticate().catch(err => {
            authService.onError(err);
            throw err;
          }))
          .then(() => this.render());
        }
      }).catch(err => {
        this.$el.html('Oh no!');
      });
  }
});

Contibuting

Getting Started

Fork and clone this repo.

git clone git@github.com:thejameskyle/backbone.service.git && cd backbone.service

Make sure Node.js and npm are installed.

npm install

Running Tests

npm test

===

© 2015 James Kyle. Distributed under ISC license. © 2018 Modified by Luiz Américo

Readme

Keywords

none

Package Sidebar

Install

npm i radio.service

Weekly Downloads

10

Version

0.6.0

License

MIT

Unpacked Size

13.5 kB

Total Files

8

Last publish

Collaborators

  • blikblum