додзё/аспект до()/после() один раз()?

dojo/on имеет один раз(), что чрезвычайно полезно. Как реализовать такое поведение в додзё/аспекте до()/после()? Я не могу поверить, что кто-то реализовал один раз () для dojo/on, но не для dojo/aspect. Я не вижу никакой разницы.


person Alex    schedule 04.06.2013    source источник


Ответы (1)


неужели так сложно сохранить возврат до/после и вызвать на нем remove? Вот простая реализация:

aspect.onceAfter: function(target, methodName, advice, receiveArguments){
  var handle = aspect.after(target, methodName, function(){
    handle.remove();
    advice.apply(null, arguments);
  }, receiveArguments);
}
person David McMullin    schedule 04.06.2013
comment
Это не сложно, но мне интересно, почему такие нестыковки в API. Потребуются минуты, чтобы внедрить что-то подобное в модуль аспекта. Теперь мне нужно изменить 100 ссылок в моих приложениях с dojo/aspect на my/new/aspect, которые включают эту функциональность. - person Alex; 04.06.2013
comment
Я не могу говорить о мотивации того, кто написал API-интерфейсы додзё, но я знаю, что мне никогда не была нужна эта функция once с after/before, мне любопытно узнать ваш вариант использования, если честно. И спасибо, что заметили опечатку =) - person David McMullin; 04.06.2013
comment
Я тоже не писал, и я написал около 50 тысяч строк кода с Dojo во многих приложениях. И это первый раз, когда мне это нужно, потому что это кажется таким удобным. Это отличная автоматическая вещь, когда модули независимы/слабо связаны - один раз () и все готово, а остальное - GC :) - person Alex; 04.06.2013
comment
Я полагаю, это потому, что это не концепция, которая используется в аспектно-ориентированном программировании. АОП — это перекрестные проблемы и внедрение кода в несколько точек вашей программы (такие вещи, как ведение журнала). Его цель не в том, чтобы выполнить блок кода один раз и никогда больше. Я никогда не видел аспектно-ориентированного кода, который должен выполняться один раз. С таким мышлением вы бы не подумали о создании одноразовой функции. - person g00glen00b; 04.06.2013
comment
Вы можете отправить запрос функции на bugtrac. Скорее всего, его примут. - person Layke; 04.06.2013