0

Backbone.Router インスタンスが「#/settings」や「#/settings/privacy」などのハッシュバングをリッスンするようにしたい

現在、私はこの問題を次のように処理しています。

var Router = Backbone.Router.extend({

    routes: {
         "settings": "settings",
         "settings/:query": "settings"
    },

    settings: function(query) {
        // do the routing
    }

});

私は今、このすべてを1つのルートだけでやりたいと思っています。残念ながら、'settings/:query' は 'settings/' しか許可しません。

これを処理する方法はありますか?

よろしく

4

1 に答える 1

1

ここにはいくつかのオプションがあります。#settings/(最後のスラッシュに注意してください) や のようなルートに満足している場合は#settings/privacy、これを使用できます。

routes: {
    'settings/*query': 'settings'
}

デモ: http://jsfiddle.net/ambiguous/m7ufD/

ただし、それは機能しません#settings。そのルートが機能するには、最後のスラッシュが必要です。

のようなルートがない場合は、次のよう#settings-something-elseにすることができます。

routes: {
    'settings*query': 'settings'
}

デモ: http://jsfiddle.net/ambiguous/MudaG/

これは次のようなものにも一致#settingsandstuffし、ルート ハンドラの引数にスラッシュが残ります (つまり、関数は'/privacy'だけではなくget になります'privacy')。

最も柔軟なオプションはroute、正規表現を直接使用することです。その後、上記の問題のいずれも発生せずに単一のルート#settingsと一致させることができます。#settings/privacy

// No routes, do it in initialize instead
initialize: function() {
    this.route(/^settings(?:\/(.*)|)$/, 'settings');
}

デモ: http://jsfiddle.net/ambiguous/XGrQz/

それは一致せ#settings-and-stuffず、 の関数の引数に先頭のスラッシュが含まれません#settings/privacy

于 2012-09-01T18:58:15.533 に答える