是否可以有多个viewEngine.viewExtension

时间:2013-03-14 22:12:24

标签: single-page-application durandal hottowel

我有一个asp.net Hot Towel SPA应用程序,我想同时使用.html和.cshtml页面。

是否可以添加多个viewExtensions:

viewEngine.viewExtension = '.cshtml';
viewEngine.viewExtension = '.html';

2 个答案:

答案 0 :(得分:3)

viewExtension不是数组,因此在开始时,您无法设置多个viewExtensions。当然,这只是javascript,你可以进入源代码并从核心Durandal应用程序文件夹中更改viewEngine.js(链接在这里:https://github.com/BlueSpire/Durandal/blob/master/App/durandal/viewEngine.js)。

话虽如此,如果客户端下拉* .cshtml文件,剃刀语法将不会以您认为的方式呈现。如果服务器提供* .cshtml视图,那么它将在向客户端吐出之前呈现。你最好的选择是,如果你正在寻找使用Durandal的动态视图渲染,那就是覆盖viewEngine中的一个或两个函数,即:viewEngine.convertViewIdToRequirePath(viewId):string,甚至进一步控制viewEngine.createView(viewId):promise。

有关详细信息,请查看以下链接:Routing and Leveraging Dynamic Content in DurandalJS

答案 1 :(得分:1)

看一下这个要点:https://gist.github.com/irium/5191764

这是我自己解决类似问题的方法。这些是Durandal viewEngine的自定义  和viewLocator。在shell模块中导入此模块,然后同时运行customizeViewEngine()customizeViewLocator()个功能。之后,.html扩展程序的视图将像以前一样处理,但会从远程服务器请求.cshtml个视图。但请记住:由于Durandal的视图缓存,这只会进行一次。同一视图的所有后续请求将在客户端使用缓存版本。这可以通过从RequireJS手动取消注册视图的模块来更改,但这超出了我的需求范围

这是编译为JavaScript的CoffeScript代码,但我希望你能得到这个想法,我的代码会帮助你。