14

pushStateサポートはBackbone.jsのバージョン0.5アップデートで導入されました。

バックボーンドキュメントから:

実際のURLを使用するには、Webサーバーがそれらのページを正しくレンダリングできる必要があるため、バックエンドの変更も必要であることに注意してください。たとえば、/ document / 100のルートがある場合、ブラウザがそのURLに直接アクセスすると、Webサーバーはそのページを提供できる必要があります。完全な検索エンジンのクロール可能性を得るには、サーバーにページの完全なHTMLを生成させるのが最善です...しかし、それがWebアプリケーションの場合は、ルートURLと同じコンテンツをレンダリングし、残りをBackboneで埋めます。ビューとJavaScriptは正常に機能します。

これは些細な質問のように思えるかもしれませんが、誰かが特定の(できればエクスプレスの)node.jsサーバーコードを手伝ってくれるかどうか疑問に思っています。これらのルートをどのように処理すればよいですか?私は少し混乱しています。

これが私のアプリのルーターモジュールからの関連する抜粋です:

var Router = Backbone.Router.extend({
    routes: {
        '': 'index',
        'about': 'about'
    },
    index: function() {
        indexView.render();
    },
    about: function() {
        aboutView.render();
    }
});

var initialize = function() {
    var router = new Router;
    Backbone.history.start({ pushState: true });
}

return {
    initialize: initialize
};

ここにはトップレベルのルートと概要ページのルートしかありません。では、次の場所に移動できるようにするノードサーバーをどのように設定する必要がありますか。

domain.com
domain.com/about
domain.com/#/about // <- for browsers that don't support pushState
4

1 に答える 1

18

説明

domain.com/#/aboutまず、サーバーは#フラグメントを読み取らないため、サーバーの「/」ルートを呼び出すことを知っておく必要があります。サーバーはBackbone.jsアプリケーションのベースをレンダリングし、Backboneは「about」ルートをトリガーします。

したがって、ExpressJSで2つのルートを宣言する必要があります。

  • /
  • /約

コード

app.get('/', function(req, res) {
    // Trigger the routes 'domain.com' and 'domain.com/#/about'
    // Here render the base of your application
});

app.get('/about', function (req, res) {
    // Trigger the route 'domain.com/about'
    // Here use templates to generate the right view and render
});

Derick BaileyによるBackbone.jsとのSEO互換性のために、3つのリンクをお勧めします。

于 2012-01-20T07:32:02.743 に答える