如何用区域设置durandaljs?

时间:2013-05-02 17:12:13

标签: single-page-application durandal

对于我的生活,我不能让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的工作示例吗?文章文件的链接也足够了。

2 个答案:

答案 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方法是值得的。