code: function makeParamsObserver() {
      
      // Observe and unobserve the children.
      function _observeChildren  (v) { observeObjectNow(v, childrenObserver); }
      function _unobserveChildren(v) { unobserveObject (v, childrenObserver); }
      
      function _observeAttrs(v) {
        observeObjectNow(v, attrsObserver);
        subAttrs.forEach(a => observeObjectNow(v[a], subAttrObservers[a]));
      }
      function _unobserveAttrs(v) {
        unobserveObject(v, AttributesObserver);
        subAttr.forEach(a => unobserveObject(v[a], subAttrObservers[a]));
      }
  
      // When we get a new parameter, set up observers.
      function add(v, i) {
        switch (i) {
        case 'children':
          _observeChildren(v);
          break;
        case 'attrs':    _observeAttrs   (v); break;
        }
      }
      
      // When parameters change, tear down and resetup observers.
      function update(v, i, params, {oldValue}) {
        switch (i) {
        case 'children': _unobserveChildren(oldValue); _observeChildren(v); break;
        case 'attrs':    _unobserveAttrs   (oldValue); _observeAttrs   (v); break;
        }
      }
      
      return makeObserver({add, update});
    }
docs: Handle changes to parameters. -----------------------------