Domanda

Sono in un modo per fare un compaità tra Xui e Backbone, ma ho incontrato un problema nel mio design. Credo.

Eccolo. Voglio estendere Xui con una chiamata del metodo attr che sarebbe in grado di affrontare un hash di attributes/values. JQuery lo fa e la spina dorsale lo sfrutta. È per questo che voglio farlo.

Sfortunato, c'è già un attr Metodo in Xui. Quindi, quando lo faccio:

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

Naturalmente, il Proto di Xui ha solo un metodo ATRT. Il mio. Come posso averne due?

Qualcosa che sta seguendo a disposizione:

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

Grazie per aver letto e aiutato :)

È stato utile?

Soluzione

È necessario salvare un riferimento alla funzione originale, quindi guardare gli argomenti con cui viene chiamata la funzione per determinare il tempo che dovresti chiamare la tua versione o l'originale.

Qualcosa di simile a questo (codice non testato, quindi usa solo per l'ispirazione):

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 */
  }
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top