2017-03-22 11 views
1

すぐに短い月を変更する必要があります。 しかし、私はそれをすることはできません。 私は私が燃えさし - 蜃気楼のエラーember-momentを使用して短い月の名前を設定する方法

Your Ember app tried to GET '/assets/moment-locales/ru.js?_=1490191145335', 
but there was no route defined to handle this request. Define a route that 
matches this path in your mirage/config.js file 

が、それは一瞬の短いヶ月名を設定するための簡単な方法である必要があり

localeOutputPath: 'assets/moment-locales' 

を設定し、この場合

Ember.$.getScript('/assets/moment-locales/ru.js'); 

を呼び出そうとしていますか?

+0

私の答えは明確ではありませんか?私が提供したソースコードを複製し、必要に応じてさらに質問してください。 – alptugd

答えて

0

私はあなたが使用していると仮定します。ember-moment addon;あなたが言及したように既にconfig/environment.js

moment: { 
    // This will output _all_ locale scripts to assets/moment-locales 
    localeOutputPath: 'assets/moment-locales' 
}, 

と設定されています。

Ember.$.getScript('/assets/moment-locales/ru.js'); 

必要に応じて動的にその場で瞬間ruロケールをロードする方法を提供します。これは、関連するロケールをアプリケーションのjavascriptファイルにインクルードする代わりに、アプリケーション内のユーザーの要求によって関連するロケールをロードすることを好みます。一般的には、ルータのフック方法(beforeModelまたはmodelなど)でこのようなローディング操作を実行することが最も適しています。

momentから短い月の名前を取得するには、あなたは

import moment from 'moment'; 

を介して第一輸入ES6 momentモジュールに必要と私の知る限り見ることができるように

moment.monthsShort() 

と短い月名にアクセスします。あなたがあなたが言及したエラーを取得するようにロケールを要求している方法に問題があります。私は、実用的なコードが純粋なテキストからのより良い説明だと信じています。したがって、ルートでロケールを動的に変更する方法と、momentから取得した短縮名を表示する方法を示すために、次のようにgit repositoryを作成しました。あなたのローカルホストで複製して実行してみてください。

このリポジトリのアプリケーションでは、application.hbsに5つのサブルートへのリンクが含まれています。それぞれ異なる言語で月の短い名前を表示します。関連するロケールを動的にロードするトリックを行うコードは、routes/locale-route.jsファイルのmodelフックメソッドにあります。ロケールが既にロードされている場合(英語ではデフォルトでmomentが含まれています)、ターゲットロケール(moment.locale(localeToLoad);)に切り替えることで月の短縮名を返します。それ以外の場合は、サーバーへのリモート呼び出しを実行し、約束を使用して応答を待って月の名前を返します。 5つの異なる言語のすべてのルートは、この基本ルートから拡張されています。一度、ロケールがサーバーからロードされます。もう一度もう一度ロードする必要はなく、私が説明したようにlocale-routeがすでにそれを処理しています。私はそれが助けて欲しい

コメントを読んだ後。私はember-cli-mirageを含めるようにソースコードを更新しました。ミラージュは、アプリケーションを開発、テスト、プロトタイプ作成するためのクライアント側モックサーバーです。これを依存関係として含めると、リモート呼び出し要求の代行受信が開始されます。したがって、あなたのケースでは、ミラージュは関連するロケールを要求する要求を傍受します。あなたがしなければならないことは、ロケールの蜃気楼を通り抜けることです。そのためには、あなたはとてもその蜃気楼が実行時に瞬間-ロケールを要求して干渉しないmirage/config.js

this.passthrough('/assets/moment-locales/**'); 

次を追加する必要があります。私が提供しているgitリポジトリのrelated fileを参照してください。これはあなたの問題を確実に解決します。

+0

Emberを呼び出します。$。getScript( '/ assets/moment-locales/ru.js');この呼び出しがEmber-mirageによってキャッチされ、このURLを処理できないというエラーで失敗するため、悪い決断です。 –

+0

@AlexeyVashchenkov mirageは、開発、テスト、プロトタイプを作成するクライアントサイドのモックサーバーです。実際の生産では使用できません。私はミラージュが動的にロケールを読み込むためにあなたの呼び出しを傍受する理由を知りません。あなたは "Emberを呼び出してください。$。getScript( '/ assets/moment-locales/ru.js');悪い決断です";私はそれに同意しない。 [ember-moment](https://github.com/stefanpenner/ember-moment)に示されているように、ロケールを動的にロードするための推奨方法です。あなたの質問は、少なくとも私にとっては明らかではありません。要求に応じてロケールを読み込む必要がありますか? – alptugd

+0

@AlexeyVashchenkov私はあなたの質問をより良く理解し、答えを更新しました。私が書いたものを試してみて、私のソースコードを見てください(私は今あなたのケースにあるようにミラージュを含んでいます!)。受諾しupvoteを忘れないでください:) – alptugd

関連する問題