2013-03-18 7 views
6

私の組織では各エリアがSPAを表し、 "Manage NuGet Package"を介してインターネットアプリケーションmvc4を持っています。 "Durandal 1.2.0"、 "Durandal Transitions 1.2.0"と "Durandal Router 1.2.0"があります。私はフォルダを整理し、Durandalのフォルダ "App"から "views"と "viewmodels"を終了し、新しいビューをmvc4エリアのフォルダ "VIEWs"に入れます:複数のSPAのためのDurandalとMVC4エリア

エリア - > NewArea - > Views - > ControllerFolder - >ビュー - > shell.htmlその後

私は例えば "スクリプト" フォルダ内の「 "のviewmodels" を置く:

スクリプト - > NewArea - > ControllerFolder - > viewmodels - > shell.js

スクリプト - > NewArea - > ControllerFolder - > main.js

それから私は、main.js、例えば、デュランダルのJSのパスを変更:

define(['../../../App/durandal/app', 
    '../../../App/durandal/viewLocator', 
    '../../../App/durandal/system', 
    '../../../App/durandal/plugins/router', 
    '../../../App/services/logger'], 

そして、私は次の行にmain.jsを変更:

viewLocator.useConvention('viewmodels', '../Areas/NewArea/Views/ControllerFolder/views'); 

しかし、フォルダの構成は次のために失敗しましたラインは、その定義における「viewLocator」モジュール様々な時間を呼び出して、デフォルト値を「useConvention」の設定を書き換える:

app.setRoot('viewmodels/shell', 'entrance'); 

その動作のみ発生したときに、フォルダ「ビュー」 d "ビューモデル"は "Durandal"の "App"フォルダの下にはありません。

同じプロジェクトでさまざまなSPAを使用する方法を教えてください。

答えて

5

展開方法を検討するとよいでしょう。たとえば、このアプリケーションを最適化する必要がある場合、両方のSPAが同じファイルに格納されます。ただし、両方をappフォルダの下に置く代わりに、別々のフォルダを作成して、各SPAに独自のmain.jsファイルを割り当てることができます。

さらに高度なシナリオでは、1つまたは別のSPAをロードする「ブートストラップ」アプリケーションを作成することができます。ブートストラップには、両方のSPAに共通のコードが含まれています。しかし、各SPA(およびブートストラップ)は個別に最適化することができます。

多くのオプションがあります。主に、最終的な導入戦略を検討してください。

また、上記の問題は、おそらく標準の規約がセットアップで機能しない可能性があり、独自のマッピングで一部の機能を無効にする必要があることに関連している可能性があります。

+1

ありがとう、あなたの提案のために、多分あなたは私に "bootstrapper"についてのより多くの情報を与えることができます。 – kuskunko

5

私は今朝全く同じ問題に遭遇しました。私はもともとするプロジェクトを書式設定:

  • アプリ/ SPA1 /のviewmodels
  • アプリ/ SPA1 /ビュー
  • アプリ/ SPA2 /のviewmodels
  • アプリ/ SPA2 /ビュー

使い方この構造は私があなたがしたのと全く同じ壁に当たった。あなたの記事を読んだ後、私はあることを、プロジェクトを再構築:

  • アプリ/のviewmodels/SPA1
  • アプリ/のviewmodels/SPA2
  • アプリ/ビュー/ SPA1
  • アプリ/ビュー/ SPA2

この構造を使用すると、ナビゲーションが正常に動作します。私は3つのSPASをセットアップし、3つすべてをナビゲートすることができました。この構造のもう1つの利点は、標準の規約に従っているため、ビューロケータを設定する必要がないことです。ただ、確認してください各スパ用main.jsファイルは使用しています:

  • app.setRoot( 'ビューモデル/ SPA1 /シェル)、app.setRoot(' ビューモデル/ SPA2 /シェル)など

最後に、このように構造化することで、main.jsファイルを構造体に移動し、すべての定義で../../../を削除します。

こちらがお役に立てば幸いです。

+0

ありがとうございます、今あなたの構造を使用しており、それは正常に動作します。 – kuskunko

関連する問題