1

私はそれを失っているに違いない。最も単純なBackboneアプリを設定しましたが、応答するルートを取得できないようです。これが私のルーターです(coffeescriptで):

class BackboneSupport.Routers.TicketsRouter extends Backbone.Router
  initialize: ->
    @tickets = new BackboneSupport.Collections.TicketsCollection()

  routes:
    "/new"      : "newTicket"
    ".*"        : "index"

  newTicket: ->
    alert 'hi, from the new ticket route'

  index: ->
    // just to prove a point
    $('#tickets').html('tickets go here')
    @navigate('/new')

そして、私は列車全体を動かします:

<div id="tickets"></div>

<script type="text/javascript">
  $(function() {
    window.router = new BackboneSupport.Routers.TicketsRouter();
    Backbone.history.start();
  });
</script>

ご想像のとおり、ルートルート(インデックス)に#ticketsはプレースホルダーテキストが入力され、/ newルート(アドレスバーで確認)に正常に移動しますが、何も警告newTicketされないため、メソッドはトリガーされません。

ここで何が欠けていますか?

アップデート:

以下のrjzごとに、navigateメソッドを次のように更新しました。

@navigate('/new', {trigger: true})

しかし不思議なことに、それでもアラートはありません:/

4

1 に答える 1

5

ルートに先頭のスラッシュを含めるべきではありません。これが必要です。

class BackboneSupport.Routers.TicketsRouter extends Backbone.Router
  routes:
    "new": "newTicket"
    ".*" : "index"
  #...

デモ: http: //jsfiddle.net/ambiguous/veSDF/1/

細かいマニュアルから:

拡張する Backbone.Router.extend(properties, [classProperties])

[...]ルート定義で先頭のスラッシュを使用しないようにする必要があることに注意してください。

于 2012-04-15T17:15:59.783 に答える