Source: common/util/binding.js

define(["lib/underscore"], function(_) {

    "use strict";

    /**
     * @privconstructor
     * @class Represents the binding of a function to an event. Allows apps to
     *        clear this binding.
     * @name Binding
     */
    var Binding = function(onClear, context) {
        /** @alias Binding.prototype */
        var self = {};

        onClear = _.once(onClear);

        /**
         * Clears this binding: the bound function will no longer be called.
         */
        self.clear = function() {
            onClear.call(context);
        };

        Object.freeze(self);
        return self;
    };

    return Binding;
});