使用jquery.aop调用Backbone.js函数时的范围问题

时间:2012-03-20 11:09:18

标签: jquery backbone.js aop

我无法使用jquery.AOP调用Backbone函数。它适用于全局函数和javascript模块。

require(['app', 'jquery' ], 
     function(App, $) {     
    App.initialize();
    $.aop.before( {target: App.appRouter 
               method: 'helloWorld'}, 
            function() { 
                 alert("before Hello World");
                } 
});     

在我的示例中,app.appRouter肯定是一个活动的实例变量。 这是App及其appRouter:

define([
'jquery',
'underscore',
'backbone'
], function($, 
        _, 
    Backbone
    ){

var appRouter = Backbone.Router.extend({
    initialize: function() {
        //some code
    },
    helloWorld: function(){
                alert("hello world");
        }

});


var initialize = function(){
    this.appRouter = new appRouter(this);
    Backbone.history.start();

};


return {
       initialize: initialize,
       appRouter : this.appRouter

}; });

似乎是范围问题,因为之前的建议从未到达。 谢谢你的任何想法, 麦

1 个答案:

答案 0 :(得分:0)

这可能是时间问题。

$。aop的工作原理是用新函数替换目标函数,并保持对原始目标的引用。当你调用该函数时,它的aop版本被执行,它依次调用原始函数。

鉴于此,请尝试使用App.initialize()电话交换$.aop...来电:


$.aop.before({
  target: App.appRouter 
  method: 'helloWorld'}, 
  function() { 
    alert("before Hello World");

});
App.initialize(); 

我的另一个想法是,我在代码中看不到任何调用路由器的helloWorld方法的地方。你确定你真的叫它吗?