Проблема при вызове функций Backbone.js с помощью jquery.aop - PullRequest
0 голосов
/ 20 марта 2012

Мне не удалось вызвать функции Backbone с помощью jquery.AOP. Он хорошо работает с глобальными функциями и модулями javascript.

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

В моем примере app.appRouter определенно является живой переменной экземпляра. Вот приложение с его 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

}; });

Похоже на проблему сферой применения, так как предыдущий совет никогда не достигается. Спасибо за любые мысли, Jimmy

1 Ответ

0 голосов
/ 20 марта 2012

Это может быть проблема синхронизации.

$. Aop работает, заменяя целевую функцию новой функцией и сохраняя ссылку на исходную цель.Когда вы вызываете функцию, выполняется ее версия, и она, в свою очередь, вызывает исходную функцию.

Учитывая это, попробуйте поменять местами вызов App.initialize() с вызовом $.aop...:


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

});
App.initialize(); 

Моя другая мысль заключается в том, что я не вижу в вашем коде места, которое вызывает метод helloWorld маршрутизатора.Вы уверены, что на самом деле вы это называете?

...