3

私はrequirejsを使用して最初のプロジェクトに取り組んでいます。ルーターとビューがあり、アイテムがクリックされたときにビューから Router.navigate() メソッドにアクセスしたいと考えています。私はCoffeeScriptを使用しています。ルーターをグローバルにするにはどうすればよいですか?

ルーター.コーヒー:

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

3 に答える 3

5

すべてRouter::navigateが呼び出しBackbone.history.navigateなので、それを使用します。ソースはこちら

choice: (ev)->
    Backbone.history.navigate(...);
于 2013-05-06T16:01:51.660 に答える
4

Backbone オブジェクトに必要な他のグローバル変数とともにルーターを保存するだけです。

ルーターの init で次のようにします。

    Backbone.application = {};
    Backbone.application.router = this;

次に、次のように使用します。

define(["backbone"], function (Backbone) {
     Backbone.application.router.myaction();
});
于 2013-09-07T12:22:51.757 に答える
2

あなたの問題には 3 つの選択肢があります。

  1. ビュー コンストラクターでルーターを渡し、ローカル変数として使用する@options.router
  2. 2 つのモジュール間の循環依存関係を作成します (この回答を確認してください https://stackoverflow.com/a/16314250/329226 )
  3. ビューからカスタム ナビゲーション イベントをトリガーし、ルーター内からリッスンする
于 2013-05-06T17:04:49.623 に答える