3

我想在 XUI 和 Backbone 之间进行兼容,但我在设计中遇到了问题。我猜。

它在那里。我想用一个方法调用来扩展 XUI,attr它能够处理attributes/values. jQuery 做到了,Backbone 也利用了它。这就是为什么我想这样做。

不幸的是,XUI 中已经有一个attr方法。所以,当我这样做时:

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

当然,XUI 的 proto 只有一个 attr 方法。矿。我怎么能有两个?

可以做以下事情:

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

感谢阅读和帮助:)

4

1 回答 1

3

您需要保存对原始函数的引用,然后查看调用该函数的参数以确定您应该调用自己的版本还是原始版本的天气。

像这样的东西(未经测试的代码,所以仅用于灵感):

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 */
  }
};
于 2011-10-20T14:33:57.400 回答