1

Backbone で達成できることを探しています。これが説明です。

次のようなバックボーンルートがあります

{
    '': 'defaultRoute',
    'test': 'test',
    'testing': 'testing'
}

私のルートURLが「/routes」であると仮定します

ここで、「router.navigate('test', {trigger: true});」と言うと、' URL が/routes/testに変わります。

同様の方法で「router.navigate('testing', {trigger: true}); 」を呼び出します。' URL が/routes/testingに変わります。

しかし、' router.navigate('', {trigger: true});を呼び出すと、' URL が/routes/に変わります。

あなたは私がそれを期待していなかったことを知っています / 最後に. 私はそれを通過したことはありません。ルート URL、つまり ' /routes 'に戻っているはずです。

最後に / を追加すると、多くの違い/意味が生まれます。チェックアウト ' http://googlewebmastercentral.blogspot.in/2010/04/to-slash-or-not-to-slash.html '

そのための修正はありますか (つまり、デフォルト ルートの最後に / がありません)?

4

3 に答える 3

0

オーバーライドしてみてくださいBackbone.History.prototype.navigate

デフォルトの関数をコピーして、次の行を変更します。

  var url = this.root + fragment;

に :

  if(this.root !== '/' && fragment === ''){
    var url = this.root.replace(trailingSlash, '');
  }else{
    var url = this.root + fragment;
  }
于 2013-10-24T10:46:13.417 に答える
0

まず最初に:

アプリケーションがドメインのルート URL / から提供されていない場合は、オプションとして、ルートが実際にどこにあるかを History に伝えてください: Backbone.history.start({pushState: true, root: "/public/search/ "}) バックボーン#歴史

あなたの場合、それはのようなものである可能性が最も高いですroot: "/routes"。覚えておく必要があるのは、Web サイトはブラウザーでリソースまたはリモート フォルダーのいずれかとして表示されるため、末尾にスラッシュがないデフォルト ルートは、単に "" のままにしておくだけでは完全に機能しない可能性があるということです。現在のフォルダー」。代わりにルート URL を設定してroot: "/"(デフォルトのように)、次のようにデフォルト ルートとして「ルート」リソースを作成することもできます。

{
    'test':    'test',
    'testing': 'testing',
    'routes':  'defaultRoute',
    '*':       'catchAll'
}

私があなたに行っているもう 1 つの推奨事項 (上記のとおり) は、誰かが存在しない URL を入力した場合に備えて、最後にキャッチオール URL を設定することです。これを使用して、ユーザーをデフォルトにリダイレクトすることもできます。ルート。

// your code above ...
defaultRoute: function() {
  // your default route code...
},

catchAll: function() {
  this.navigate('routes', {trigger: true});
}
// your code below ...

最後に、何らかの理由でバックボーン URL を手動で台無しにすると、全体を壊してしまう危険性が非常に高くなります。また、将来 API が変更された場合でも、意図した使用法に従えば更新が容易になるはずです。

于 2013-10-24T12:48:28.813 に答える