Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 主干和要求。如何从任何地方访问我的主干路由器_Object_Backbone.js_Requirejs_Global_Router - Fatal编程技术网

Object 主干和要求。如何从任何地方访问我的主干路由器

Object 主干和要求。如何从任何地方访问我的主干路由器,object,backbone.js,requirejs,global,router,Object,Backbone.js,Requirejs,Global,Router,我正在使用requirejs进行我的第一个项目。我有一个路由器和一个视图,我想在单击某个项目时从视图访问我的router.navigate()方法。我喜欢用咖啡脚本。如何使路由器全球化 router.coffee: define [ 'jquery' 'backbone' 'application/views/mainView' 'application/models/app' ],($,Backbone,MainView,App)-> class Router extends Backb

我正在使用requirejs进行我的第一个项目。我有一个路由器和一个视图,我想在单击某个项目时从视图访问我的router.navigate()方法。我喜欢用咖啡脚本。如何使路由器全球化

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')
咖啡

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()

所有的
Router::navigate
所做的就是调用
Backbone.history.navigate
,所以我会使用它


我认为有三种方法可以解决您的问题:

  • 在视图构造函数中传递路由器并用作局部变量
    @options.router
  • 在两个模块之间建立循环依赖关系(检查此答案)
  • 从视图触发自定义导航事件,并从路由器内侦听该事件

  • 只需在主干对象中存储路由器以及所需的其他全局变量

    在路由器初始化中,执行以下操作:

        Backbone.application = {};
        Backbone.application.router = this;
    
    然后像这样使用它:

    define(["backbone"], function (Backbone) {
         Backbone.application.router.myaction();
    });
    

    为什么不直接调用
    Backbone.history.navigate()
    ?@loganfsmyth噢,对不起,你忘了以答案的形式发布你的问题。:)我已经使用了解决方案3,但我不喜欢它。Backbone.history.navigate()工作正常。但是解决方案2在其他一些问题上对我帮助很大。非常感谢。:)
    define(["backbone"], function (Backbone) {
         Backbone.application.router.myaction();
    });