docs: function (binding, subpath, cb) {
          var args = Util.resolveArgs(
            arguments,
            function (x) { return x instanceof Binding ? 'binding' : null; },
            function (x) { return Util.canRepresentSubpath(x) ? 'subpath' : null; },
            'cb'
          );
  
          if (!this._bindingListenerRemovers) {
            this._bindingListenerRemovers = [];
          }
  
          var effectiveBinding = args.binding || this.getDefaultBinding();
          if (!effectiveBinding) {
            return console.warn('Morearty: cannot attach binding listener to a component without default binding');
          }
          var listenerId = effectiveBinding.addListener(args.subpath, args.cb);
          this._bindingListenerRemovers.push(function () {
            effectiveBinding.removeListener(listenerId);
          });
  
          return listenerId;
        }