code: function(type, name, value) {
      if (type === 'text' && value == null) {
        value = name;
        name = undefined;
      }
  
      if (name === this.animateAttribute) {
        return;
      }
  
      var binder = this.getBinder(type, name), binders = this.binders[type];
  
      if (!binder) {
        var toMatch = (type === 'text') ? value : name;
        binders._wildcards.some(function(wildcardBinder) {
          if (toMatch.match(wildcardBinder.expression)) {
            binder = wildcardBinder;
            return true;
          }
        });
      }
  
      // don't use e.g. the `value` binder if there is no expression in the attribute value (e.g. `value="some text"`)
      if (binder &&
          type === 'attribute' &&
          binder.prototype.onlyWhenBound &&
          !this.binders[type]._delimitersOnlyInDefault &&
          !this.isBound(type, value)) {
        return;
      }
  
      // Test if the attribute value is bound (e.g. `href="/posts/{{ post.id }}"`)
      if (!binder && value && (type === 'text' || this.isBound(type, value))) {
        binder = this.getBinder(type, '__default__');
      }
  
      return binder;
    }
docs: Find a matching binder for the given type. Elements should only provide name. Attributes should provide the name
  and value (value so the default can be returned if an expression exists in the value). Text nodes should only
  provide the value (in place of the name) and will return the default if no binders match.