Skip to content

Instantly share code, notes, and snippets.

@allbinmani
Created April 20, 2016 12:35
Show Gist options
  • Save allbinmani/0ded1aa40dcc89b3bdb981e8598fbcd3 to your computer and use it in GitHub Desktop.
Save allbinmani/0ded1aa40dcc89b3bdb981e8598fbcd3 to your computer and use it in GitHub Desktop.
listenToAnyOnce handler for Backbone
/*
* listenToAnyOnce handler for Backbone.[View|Collection|Model]
*
* Call with space separated list of events to listenToOnce, and
* the callback will be called only once any of those events occur.
*
* Usage:
*
* - npm install gist:<this-gist-id>
*
* - package.json:
*
* {...
* "dependencies": {
* "listenToAnyOnce": "gist:<this-gist-id>"
* }
* ...
*
* - source.js:
* var Backbone = require('Backbone');
* require('backbone.listenToAnyOnce')(Backbone.View);
*
* var view = new Backbone.View();
* view.listenToAnyOnce('render close', function(event) {
* alert('single view event: ' + event);
* });
*
* AUTHOR: Mattias Nilsson <mattias@allbinary.se>
* LICENSE: GPL 2.0
* CHANGELOG:
* - 2016-04-20: Initial revision
*
*/
var listenToAnyOnce = function(root) {
root.prototype.listenToAnyOnce = function(target, events, callback) {
var handler = function() {
this.stopListening(target, events, handler);
callback.apply(this, arguments);
}.bind(this);
this.listenToOnce(target, events, handler);
};
};
module.exports = listenToAnyOnce;
{
"name": "backbone.listenToAnyOnce",
"version": "1.0.0",
"main": "backbone.listenToAnyOnce.js",
"author": "Mattias Nilsosn <mattias@allbinary.se>",
"license": "GPL2.0",
"repository": "gist:1cb63ca9d2c65096d08970e061908098"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment