Pregunta

Estoy en una forma de hacer compats entre Xui y Backbone, pero tuve un problema en mi diseño. Supongo.

Ahí está. Quiero extender Xui con una llamada de método attr que podría lidiar con un hash de attributes/values. JQuery lo hace y la columna vertebral lo explota. Es por eso que quiero hacer esto.

Desafortunado, ya hay un attr Método en XUI. Entonces, cuando lo hago:

xui.extend({
  attr:   function (attributes) {
    if (typeof attributes == "object") {
      for (var attr in attributes) {
        this.attr(attr, attributes[attr]);
      }
    };
  }
});

Por supuesto, el Proto de XUI tiene solo un método ATTR. Mío. ¿Cómo puedo tener dos?

Algo que sigue disponible:

xui(element).attr('attr', 'value');
xui(element).attr({'attr': 'value', 'foo': 'bar'});

Gracias por leer y ayudar :)

¿Fue útil?

Solución

Debe guardar una referencia a la función original, y luego mirar los argumentos con los que se llama a la función para determinar el clima que debe llamar a su propia versión o el original.

Algo como esto (código no probado, así que use solo para inspiración):

var originalAttr = xui.attr;

xui.attr = function () {
  if(typeof arguments[0] === 'string') {
   originalAttr.apply(this, arguments);
  }
  else if(typeof arguments[0] === 'object') {
    for (var attr in attributes) {
      originalAttr.call(this, attr, attributes[attr]);
    }
  }
  else {
   /* unsupported arguments */
  }
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top