2015-01-22 3 views
0

저는 AppRouter와 컨트롤러가 있습니다. 가 가능하다 (브라우저의 URL 표시 줄에없는) 문자열 #foo/123을 갖는 지금이 링크 <a class="myLink" href="#foo/123">link</a>에 나는 브라우저의 URL이 변경 될 수 원하는, 그래서URL 해시 문자열이 주어지면 지정된 컨트롤러 메소드를 해결하도록 AppRouter에 요청하십시오.

$('.myLink').click(function (evt) { 
    evt.preventDefault(); 

    // do something else 
    // ... 

    var href = $(this).attr('href'); // #foo/123 
    // now I want to use AppRouter/Controller to do as they are designed to. 
}); 

var MyRouter = Backbone.Marionette.AppRouter.extend({ 
    appRoutes: { "foo/:id": "doFoo" } 
}); 

App.on('before:start', function() { 
    App.router = new myRouter({ 
    controller: new myController() 
    }); 
}); 

질문하지 않는다 라우터에 컨트롤러 방법 doFoo을 해결하도록 요청 하시겠습니까?

doFoo이라고 말하지 않고 라우터에 직접 doFoo을 호출하도록 지시 하시겠습니까?

답변

0

예, 가능하지는 않습니다. 더 나은 방법은 이벤트를 사용하는 것입니다. '지정된 컨트롤러 방법을 해결하기 위해'

$('.myLink').click(function (evt) { 
    evt.preventDefault(); 
    App.vent.trigger("do controller handler"); 
}); 

controller.listenTo(App.vent, "do controller handler", controller.handler); 
+0

'handler.route' 메소드가 필요합니다. 이제 사용할 핸들러, 콜백을 실행하는 방법을 찾을 수 있습니까? [1]은 true를 반환하지만'Backbone.history.handlers [1] .callback()'은 오류를줍니다 :'null 'of'slice '속성을 읽을 수 없습니다 –

+0

아마도 올바른 인수를 핸들러에 전달하지 않을 것입니다. –

+0

나는 더 많은 것을 요청할 수 있습니다 :'Backbone.history.handlers [the_index] .callback (the_id)'는 원래 질문에서'doFoo'를 호출하는 좋은 방법입니까? –

0

앤드류 Hubbs이 질문에 대답 :

여기
var x = "foo/123"; 
_.select(Backbone.history.handlers, function(handler) { 
    return handler.route.test(x); 
}); 

이 더 나은 경로입니다 :

당신이 제안하는 일을하는 방법이다 . 후속 질문 '방법을 발견하는 방법을 실행하기'에 대한

, 여기에 확장 대답은 앤드류 Hubbs '널 왜

var href = "foo/123"; // url hash, after # 

// _.find returns the first match 
var handler = _.find(Backbone.history.handlers, function(handler) { 
    return handler.route.test(href); 
}); 

if (!!handler) { 
    handler.callback.apply(null, handler.route.exec(href)); 
} 

:
널이의 값'이 '가 제공이 '콜백'을 호출하십시오. Function.prototype.apply()을 참조하십시오.

'this'가 무엇인지 모릅니다. null 작품을 제공합니다. 이것을 생략하면 js 오류가 발생합니다 : Cannot read property 'slice' of null