Socket
Book a DemoInstallSign in
Socket

halo

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

halo

Keeping your Backbone.js straight with Socket.io

0.1.6
latest
Source
npmnpm
Version published
Maintainers
1
Created
Source

Halo

This library makes it quick and easy to build a real-time node backend for Backbone.js clients using Socket.io as the communication protocol.

Installation

npm install halo

Quick Start/Example

Back-end

First, require halo

var Halo = require("halo");

Next, create a model by calling the extend method on Halo.model. You can give it an any properties and classProperties you'd like. You can also give it a constructor (called an initializer). If you override the default constructor of Halo.model, make sure to call the parent constructor using this.parent(Halo.Model).constructor somewhere in your function.

var MyModel = Halo.Model.extend({
  initializer : function(options) {
    
    // Call the parent pseudo-class's constructor.
    this.parent(Halo.Model).constructor(options);
    
    // Initialize your model
  },

  properties : {
    defaults : {
      someProperty : "a default value"
    },

    someMethod : function() {
      // Do some stuff
    },
    
    someOtherMethod : function() {
      // Do some other stuff
    }
  }
});

Assign a collection to the new model class. Anytime this model is instantiated, that instance will be added to the collection you specify here.

MyModel.collection = new Halo.Collection({contains: MyModel});    

Next, create a View for this model. The View specifies how your model is represented to front-end clients and how those clients are permitted to interact with the model.

var MyModelView = Halo.views.socket.Model.extend({
  properties : {
    
    // The name string should be used as your Backbone.js Model's URL.
    name : "MyModels", 
    obj : MyModel,
    
    // This dictionary defines what your front-end clients have 
    // permission to do. Possible values include: 
    // create, read, update, destroy, list
    routes : {
      'create'  : 'create',
      'read'    : 'read',
      'update'  : 'update',
      'list'    : 'list'
    },

    // If you have custom logic for a given action, just
    // provide a function with the name of the action.
    update : function(client, data) {
      
      var myModel = MyModel.collection.get(data.id);

      if (!myModel.get('someProperty' !== "a default value")) {
        
        // When setting properties on a model, you can pass in
        // an array limiting the names of the properties to set.
        myModel.set(data, ['someProperty']);
      }
      return this.render(client, myModel, data);
    }
  }
});

To allow front-end clients to interact with the view, you must create a router and register the view with it.

var router = new Halo.Router();
router.addView(new MyModelView());
router.listen(80);

Front-end

In your front-end app, include Socket.io and the Halo.sync.js Backbone extension using the following URLs. These URLs are automatically made available once router.listen() is invoked.

<script src="/socket.io/socket.io.js"></script>
<script src="/halo/halo.sync.js"></script>

Now your Backbone models and collections can be bound to any Halo models or collection that have view objects registered with the Halo router.

var MyBackboneModel = Backbone.Model.extend({
  url: function() { return "MyModels"; }
});

For example, if you created a Backbone model that returned "MyModels" as the URL, which corresponds to the "name" property of the MyModelView, any time a client saved a change to a MyModel instance, that change will get pushed to all other clients who have a copy of that instance of MyModel. Similarly, creating new MyModels will add that new instance to any Backbone collection connected to MyModels.

Attribution/Credits

The code for Halo.sync was heavily borrowed from Backbone.ioBind, created by Jake Luer, and distributed under the MIT license. You can find his original library at http://alogicalparadox.com/backbone.iobind/ https://github.com/logicalparadox/backbone.iobind

License

Released under the MIT license. See file called LICENSE for more details.

Keywords

Backbone

FAQs

Package last updated on 05 Dec 2012

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.