23

最新バージョンのEmber.jsを使用して、新しいクライアント側のみのアプリに取り組んでいます。スクリプト、css、テンプレートファイルなどをビルドしてすべてをindex.phpに配信する単一のPHPページがあります。すべてのリクエストが/index.phpに書き換えられるように、htaccessディレクティブを使用しています。私の知る限り、PHPはJavascriptを便利にパッケージ化するためだけにあります。

現在、ブラウザのルートは次のようになり、正常に機能します。

/#/about 
/#/favorites
/#/etc
/#/posts/5/edit

しかし、私はそれらをこのように見せたいと思います-それはうまく機能しません。

/about
/favorites
/etc
/posts/5/edit

まったく同じクライアントコードが2番目のオプションで引き続き配信されますが、常にインデックスルートハンドラーにヒットします。私は以前にクライアントサイドアプリがこれをやってのけるのを見たことがあります-私は何が欠けていますか?PHP側に一致するルートハンドラーが必要ですか?

編集:私はこれにアプローチする方法の具体的な答えを探しています。ウェブは「ああ、あなたはこれをするだけだ」という情報でいっぱいで、他のみんなが頭を悩ませている。

4

4 に答える 4

48

Ember.js(バージョン1.0.0rc3)では、これはEmber.jsロケーションAPIを使用して実現できます。

App.Router.reopen({
  location: 'history'
});

次に、トラフィックをEmberアプリケーションにリダイレクトするようにWebサーバーを設定します。

具体的な例を示すため.htaccessに、index.htmlにあるEmberアプリケーションにトラフィックをリダイレクトする基本的なApacheファイルを示します。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.html#$1 [L]

AlexWhiteが指摘しているようにApache2.2.16以降は、トラフィックを単一のターゲットにリダイレクトするためのより単純な構成をサポートしています

FallbackResource /index.html

FallbackResourcemod_dirモジュールの一部であり、設定する必要がAllowOverride Indexesあります。

アプリケーションルートを徹底的にテストしてください。一般的なエラーの1つはUncaught SyntaxError: Unexpected token <、CSSおよびJSファイルへの相対リンクを使用することによって発生するです。それらを/絶対にするためにマークを付けてください。

この機能は、InternetExplorer<10ではサポートされていません

于 2013-05-14T23:07:22.633 に答える
8

RewriteRuleよりも優れており、Apache2.2.16以降でこれを使用できます。

FallbackResource /index.html

Apache構成で、すべての要求に対してRewriteRuleを実行する必要がないようにします。これにより、emberアプリケーションのすべてのルートがindex.htmlファイルに確実に収まります。

于 2014-02-11T14:41:49.087 に答える
1

@Pascal:彼は実際のページの更新について話しているのではなく、Emberのhistorylocation: 'history')を使用しています。

質問に答えるには、JavaScriptに通常どおりコンテンツを提供するように.htaccessを構成する必要があります。アプリケーションをロードするようにURLを構成すると、Emberが通常どおりURLからすべてを処理します。

于 2013-02-13T01:48:25.903 に答える
0

はい、サーバー側で一致するルートが必要になります。ハッシュタグを使用しないと、ページのリロードも強制され、処理速度が低下し、必要以上に更新される可能性があります。

さらに、サーバーを介して状態を渡すか、ブラウザのローカルストレージのバリアントを使用する必要があります。

于 2013-02-13T01:38:02.517 に答える