#javascript #backbone.js #xui
#javascript #backbone.js #xui
Вопрос:
Я пытаюсь добиться совместимости между 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 есть только один метод attr. Мой. Как я могу иметь два?
Доступно что-то, делающее следующее:
xui(element).attr('attr', 'value');
xui(element).attr({'attr': 'value', 'foo': 'bar'});
Спасибо за чтение и помощь 🙂
Ответ №1:
Вам нужно сохранить ссылку на исходную функцию, а затем посмотреть на аргументы, с которыми вызывается функция, чтобы определить, следует ли вам вызывать свою собственную версию или оригинал.
Что-то вроде этого (не тестируемый код, поэтому используйте только для вдохновения):
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 */
}
};
Комментарии:
1. Большое спасибо! Я немного подумал об этом после публикации. Это делает работу, даже если мои модульные тесты работают один раз на два.