2012-03-14 2 views
7

각 라우터 기능에 추가하지 않고도 Backbone.js 라우터가 사용될 때마다 사용자 정의 기능을 트리거하는 간단한 방법이 있는지 궁금합니다. 이제 내 스크립트는 다음과 같습니다라우터를 사용할 때마다 Backbone.js 트리거 기능

이 가
var AppRouter = Backbone.Router.extend({ 

    routes: { 
     '' : 'index', 
     'test': 'test', 
    }, 

    initialize: function() { 
    }, 

    index: function() { 
     indexView.render(); 
    }, 

    test: function() { 
     testView.render(); 
    }, 

    change: function() { 
     customFunction(); 
    } 

}); 

사람이 어떤 제안이 있습니까 :

var AppRouter = Backbone.Router.extend({ 

    routes: { 
     '' : 'index', 
     'test': 'test', 
    }, 

    initialize: function() { 
    }, 

    index: function() { 
     customFunction(); 
     indexView.render(); 
    }, 

    test: function() { 
     customFunction(); 
     testView.render(); 
    }, 

}); 

나는 이런 식으로 뭔가를하고 싶습니다?

답변

19

경로가 Router과 일치 할 때마다 경로 일치 이름을 사용하여 route:[name] 이벤트가 발생하여 클래스가 특정 경로 일치를 수신 할 수 있습니다. 모든 백본 객체는 이벤트가 발생할 때마다 발생하는 all 이벤트도 지원합니다.

Router에있는 all 이벤트에 바인드하기 위해 이것을 사용할 수 있습니다. 라우터가 라우팅을 수행 할 때마다 실행됩니다.

initialize: function() { 
    this.bind("all", this.change) 
}, 

일치하는 경로에 관심이 있다면 첫 번째 매개 변수는 바운드 기능에 전달됩니다.

자세한 내용 here in the FAQ

+0

감사합니다. 비록 bind() 대신 this.bind()를 사용해야만했습니다. – hampusohlsson

+0

나는 그 대답을 업데이트 할 것입니다. – obmarg

+0

'.navigate' 호출의 일부로'{trigger : true} '가 있으면 경로가 "run"전후에 발생합니까? – tkone

9

바인드를 작성하는 더 (신규) 백본 방법은 다음과 같습니다

initialize: function() { 
    this.listenTo(this, "all", this.change) 
}, 

더 나은 당신이 저를 요구하는 경우에 단지 route을 것이다 듣고; all 두 개의 이벤트를 트리거하기 때문에, 나는이 생각 :

"경로 : [이름]"은 (PARAMS) - 특정 경로가 일치 인 경우 라우터에 의해 해고.
"route" (route, params) - 경로 이 일치하면 라우터에서 실행됩니다.

+2

이것은 2015 년 현재 더 좋은 대답입니다 –

+2

그리고 2014 년에 만들어졌습니다 :) –

0

본인은 백본입니다. Laurens의 대답에 따라 아래 각 경로 변경을 요청했습니다.

app_router.on('route', function(e){ 
    console.log(e); 
}); 
관련 문제