6

私の組織では、各エリアがSPAを表し、「Manage NuGet Package」を通じて「Durandal 1.2.0」、「Durandal Transitions 1.2.0」、および「Durandal Router 1.2.0」をインストールしました。フォルダーを整理し、Durandal のフォルダー「App」から「views」と「viewmodels」を終了し、新しいビューを mvc4 領域のフォルダー「VIews」に配置します。たとえば:

Areas-->NewArea-->Views-->ControllerFolder-->views-->shell.html

次に、「ビューモデル」を「スクリプト」フォルダーに入れます。たとえば、次のようにします。

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

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

次に、main.js などで durandal の 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');

この現象は、"views" および "viewmodels" フォルダーが "Durandal" の "App" フォルダーに含まれていない場合にのみ発生します。

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

4

2 に答える 2

5

展開戦略を検討することをお勧めします。たとえば、このアプリを最適化する必要がある場合、両方のSPAが同じファイルになります。ただし、両方をappフォルダーの下に置く代わりに、別々のフォルダーを作成し、各SPAに独自のmain.jsファイルを与えることができます。

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

多くのオプションがあります。主に、最終的な展開戦略を検討してください。これは、ここでのガイドに役立ちます。

また、上記の問題は、標準の規則がセットアップで機能しない可能性があるという事実に関連している可能性があり、独自のマッピングで一部の関数をオーバーライドする必要があります。

于 2013-03-19T02:28:01.537 に答える
5

私は今朝まったく同じ問題に遭遇しました。私は当初、プロジェクトを次のようにフォーマットしました。

  • app / spa1 / viewmodels
  • app / spa1 / views
  • app / spa2 / viewmodels
  • app / spa2 / views

この構造を使用して、私はあなたがしたのとまったく同じ壁にぶつかりました。あなたの投稿を読んだ後、私はプロジェクトを次のように再構築しました。

  • app / viewmodels / spa1
  • app / viewmodels / spa2
  • app / views / spa1
  • app / views / spa2

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

  • app.setRoot('view models / spa1 / shell)、app.setRoot(' view models / spa2 / shell)など。

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

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

于 2013-03-18T20:51:44.250 に答える