2013-03-18 66 views
6

我有一个互联网应用mvc4与区域,为我的组织每个区域代表一个SPA,并通过“管理NuGet包”我安装了“Durandal 1.2.0”,“Durandal过渡1.2.0”和“Durandal路由器1.2.0”。我组织了文件夹并退出Durandal文件夹“App”中的“views”和“viewmodels”,并将新视图置于mvc4区域的“VIews”文件夹中,例如:Durandal和MVC4区域的多个SPA

Areas - > NewArea - > Views - > ControllerFolder - >视图 - > shell.html

然后我把“ “的ViewModels” 中的 “脚本” 文件夹,例如:

脚本 - > NewArea - > ControllerFolder - >的ViewModels - > shell.js

脚本 - > NewArea - > ControllerFolder - > main.js

然后,我改变路径,迪朗达尔的JS,例如在main.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“viewmodels”不会留在“Durandal”的“App”文件夹下。

请帮助我,如何在同一个项目中拥有各种SPA?

回答

5

您可能想要考虑您的部署策略。例如,如果你需要优化这个应用程序,两个SPA最终都会在同一个文件中。但是,您可以制作单独的文件夹,而不必将它们都放在app文件夹下,并为每个SPA指定它自己的main.js文件。

在更高级的场景中,您可以创建一个“引导程序”应用程序来加载一个或另一个SPA。引导程序将包含两个SPA都通用的代码。但是每个SPA(和引导程序)都可以独立进行优化。

有很多选择。主要考虑你的最终部署策略,这将有助于在这里引导你。

此外,上面的问题可能与标准约定可能无法在您的设置中工作的事实有关,并且您需要用自己的映射覆盖某些功能。

+1

感谢您的建议,也许您可​​以给我更多关于“bootstrapper”的信息。 – kuskunko 2013-03-19 15:14:17

5

今天早上我遇到了同样的问题。我原本格式化的项目为:

  • 应用程序/ SPA1 /的ViewModels
  • 应用程序/ SPA1 /视图
  • 应用程序/ SPA2 /的ViewModels
  • 应用程序/ SPA2 /视图

使用这个结构我碰到了同样的墙。读你的文章后,我重新调整了项目为:

  • 应用/的ViewModels/SPA1
  • 应用/的ViewModels/SPA2
  • 应用程序/视图/ SPA1
  • 应用程序/视图/ SPA2

使用此结构,导航工作正常。我建立了三个SPAS并能够浏览所有三个。这种结构的另一个好处是您现在正在遵循标准惯例,因此您不必配置视图定位器。只需确保每个Spa的main.js文件使用:

  • app.setRoot('view models/spa1/shell),app.setRoot('view models/spa2/shell)等

最后,通过构建这种方式,您将main.js文件移动到了在所有定义中消除../../../的结构。

我希望这会有所帮助。

+0

谢谢,现在我正在使用你的结构,它工作正常。 – kuskunko 2013-03-18 23:02:22