我使用AOP Jquery,其许可如下:
/**
* jQuery AOP - jQuery plugin to add features of aspect-oriented programming (AOP) to jQuery.
* http://jquery-aop.googlecode.com/
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Version: 1.3
*
* Cross-frame type detection based on Daniel Steigerwald's code (http://daniel.steigerwald.cz)
* http://gist.github.com/204554
*
*/
当我在这些目标中使用相同的方法名称时,我可以定义多个目标:
示例:
var Person={
doctor:{
setResume:function(){
}
},
engineer:{
setResume:function(){
}
}
}
而不是:
$.aop.before({
target:Person.doctor,
method:'setResume'},function(args) {
console.log('setResume will be called '):
}
});
$.aop.before({
target:Person.engineer,
method:'setResume'},function(args) {
console.log('setResume will be called '):
}
});
我想要例如:
$.aop.before({
target:[Person.doctor,Person.engineer],
// or target :'Person.*' ...
method:'setResume'},function(args) {
console.log('setResume will be called '):
}
});
答案 0 :(得分:1)
根据对jQuery AOP source code的快速回顾,看起来似乎不行不通。但是,我不明白为什么你不能创建一个允许该行为的补丁,或者向所有者建议该功能,或者可能只是创建自己的帮助函数。这样的事情(未经测试,考虑伪代码):
$.aop.beforeMultiple = function(targets, method) {
for(var i =0;i<targets.length;i++)
$.aop.before(targets[i], method);
}
答案 1 :(得分:0)
如果,看起来不是,正如@mgroves所说,安全方法是:
$.aop.beforeMultiple = function() {
var targets=arguments[0].target;
for(var i =0;i<targets.length;i++)
{
arguments[0].target=targets[i];
$.aop.before.call(this, arguments);
}
}
因为$.aop.before
的参数是:
= Arg1:一个对象:{target:Aaaa,method:'yyy'}
= Arg2:函数:function(args){}