2

在我的一生中,我无法让 durandaljs 与 Areas 一起工作。我正在开发一个具有多个迷你 SPA 的应用程序,但我不确定如何设置 durandaljs 来使用它。我无法在网上找到任何可以推动我朝着正确方向前进的东西。我发现的唯一类似的问题是这个,非常模糊。

我的目标是在它自己的文件夹中分离每个 SPA,如下所示:

App
--areas
----area1
------viewmodels
------views
----area2
------viewmodels
------views

路由器似乎没有概念,areas无论我如何映射我在与 durandal 映射后404s调用时获得的路由都试图获取.router.activate('page1');router.mapRoute('page1');/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 的工作示例吗?到文章文档的链接也足够了。

4

2 回答 2

4

您可以使用viewLocator.useConvention- 也许是这样的:

viewLocator.useConvention(
                    "areas/area1/viewmodels",
                    "areas/area1/views",
                    "areas/area1/templates"
);

要实现的一件好事是,它useConvention()可以与任何现有的 require.configpaths设置结合使用。换句话说,如果您设置 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");
于 2013-05-02T18:10:18.030 回答
1

我在我的应用程序中实现了类似的结构。我认为您必须输入这段代码才能使 viewLocator 正常工作。

viewLocator.useConvention(); //You can do that in you main.js

您可以在此处查看更多信息:http: //durandaljs.com/documentation/View-Locator/

另外我建议你看一下 viewLocator.js 的代码,尤其是 useConventionMethod 的代码。

其他可能性是覆盖方法 convertModuleIdToViewId,以使其按您的意愿工作。但我认为使用 useConvention 方法就足够了。

于 2013-05-02T17:33:08.340 回答