Extender sin anular
-
27-10-2019 - |
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 :)
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 */
}
};