我正在使用requirejs开发我的第一个项目。我有一个路由器和一个视图,我想在单击一个项目时从视图中访问我的Router.navigate()方法。我使用CoffeeScript。如何让路由器全局化?
router.coffee:
define [
'jquery'
'backbone'
'application/views/mainView'
'application/models/app'
],($,Backbone,MainView,App)->
class Router extends Backbone.Router
routes:
'organisation': 'organisationScreen'
'*actions': 'organisationScreen'
constructor:() ->
super @routes
initialize:()->
Backbone.history.start() #pushState: true
console.log " The Route Initialized"
organisationScreen:()->
$('.slides').fadeOut()
$('.confBlock').removeClass('onshow')
$('.organisationsBlock').addClass('onshow')
view.coffee
define [
'jquery'
'backbone'
'application/views/conferenceView'
],($,Backbone,ConferenceView)->
class OrganisationView extends Backbone.View
#el: '#appcontainer'
tagName : 'li'
className : 'organisation'
events:
'click .org-item' : 'choice'
template : _.template($('#Organisation-template').html())
initialize : ()->
...
render: ()->
...
choice:(ev)->
# Call Router.navigate()
答案 0 :(得分:5)
所有Router::navigate
都会调用Backbone.history.navigate
,所以我会使用它。 Here is the source
choice: (ev)->
Backbone.history.navigate(...);
答案 1 :(得分:4)
只需将路由器与Backbone对象中所需的其他全局变量一起存储即可。
在路由器init中执行以下操作:
Backbone.application = {};
Backbone.application.router = this;
然后像这样使用它:
define(["backbone"], function (Backbone) {
Backbone.application.router.myaction();
});
答案 2 :(得分:2)
我为您的问题看到了三个选项:
@options.router