对于我的生活,我不能让durandaljs与地区合作。我正在开发一个具有多个迷你SPA的应用程序,但我不确定如何设置durandaljs来使用它。我无法在网上找到任何可以让我朝着正确方向前进的东西。我发现的唯一类似问题是this one,这是非常模糊的。
我的目标是将每个SPA分隔在自己的文件夹中,如下所示:
App
--areas
----area1
------viewmodels
------views
----area2
------viewmodels
------views
路由器似乎没有areas
的概念,无论我在使用404s
映射后调用router.activate('page1');
时如何映射我获得的路由router.mapRoute('page1');
durandal正试图获得/App/viewmodels/page1.js
。
将其更改为:
router.mapRoute('areas/area1/viewmodels/page1');
router.activate('areas/area1/viewmodels/page1');
导致另一个404
抓取App/viewmodels/areas/area1/viewmodels/page1.js
我还尝试了许多其他组合,我不再记得这些组合,似乎无法让它发挥作用。
有人可以发布一个如何使用路由器插件和多个迷你SPA(区域)设置durandaljs的工作示例吗?文章文件的链接也足够了。
答案 0 :(得分:4)
您可以使用viewLocator.useConvention
- 可能是这样的:
viewLocator.useConvention(
"areas/area1/viewmodels",
"areas/area1/views",
"areas/area1/templates"
);
要实现的一件好事是useConvention()
与任何现有的require.config paths
设置一起使用。换句话说,如果你设置require.config以便“viewModels”和“views”映射到正确的文件夹,那么一切都很好。
例如,上面的代码段在功能上等同于:
window.require.config({
paths: {
"viewModels": "areas/area1/viewmodels",
"views": "areas/area1/views",
"templates": "areas/area1/templates"
}
viewLocator.useConvention("viewmodels", "views", "templates");
答案 1 :(得分:1)
我在我的应用程序中实现了类似的结构。我认为你必须把这段代码放到viewLocator上才能正常工作。
viewLocator.useConvention(); //You can do that in you main.js
您可以在此处查看更多信息:http://durandaljs.com/documentation/View-Locator/
另外我建议你查看viewLocator.js的代码,特别是useConventionMethod的代码。
其他可能性是覆盖convertModuleIdToViewId方法,使其按您的意愿工作。但我认为使用useConvention方法是值得的。