我正在尝试使用热毛巾模板实现单页面应用程序。在我尝试合并CSS HTML模板之前一切都很好。我正在使用Durandal + RequireJS。
我的导航栏HTML是在nav.cshtml中(我正在使用带有Durandal的cshtml)
如果在
之前粘贴在index.html中,则使用相同的HTML<div id="applicationHost">
它工作正常。
如果在使用Durandal导航视图的applicationHost中包含Same,则它无法正常工作。
我的nav.cshtml有一个根,没有空格或注释。
在导航栏上,hoveover相关的javascript似乎无效。
和滑块也不会触发启动它所需的javascript。
任何想法如何解决这个问题?
我已将代码上传到http://we.tl/3NgPgGhoUI,如果您复制nav.cshtml中的所有内容并将其粘贴到applicationHost上,则nave hoverover正常工作。但如果你用durandal注射它。它不会工作。 home.cshtml中的html代码也是如此。那个html实际上只是一个滑块。当使用durandal注射时,它没有显示任何东西。但如果你在index.cshtml中复制html,那么同样的工作正常。如果你能看一下它,那真是太棒了。
我将所有cshtml转换为html(索引除外),我的shell.html如下所述。
<div>
<div>
<!-- ko compose: {view: 'nav'} -->
<!-- /ko-->
</div>
<div id="content">
<!--ko compose: {
model: router.activeItem,
compositionComplete: router.compositionComplete,
attached: router.attached,
cacheViews:true,
} -->
<!--/ko-->
</div>
<!-- ko compose: {view: 'footer'} -->
<!-- /ko-->
index.cshtml是
<body>
<div id="applicationHost">
</div>
<script src="/TemplateFiles/js/jquery.js"></script>
@Scripts.Render("~/scripts/vendor")
<script src="~/Scripts/require.js" data-main="@Url.Content("~/App/main.js")"></script>
</body>
</html>
答案 0 :(得分:0)
我可以肯定地说这不起作用。加载索引页面时,它将通过标准ASP.NET管道加载,并使用Razor作为渲染引擎。 Razor允许将@Html.Partial("_splash")
之类的内容翻译成HTML(因为它在HTML中没有意义)。
另一方面,Durandal正在通过AJAX加载nav.cshtml
。它不会通过Razor渲染过程,因此您无法使用@Html.Partial("_splash")
之类的内容。所有这些代码都必须进入index.cshtml
。 Durandal检索的所有内容都必须是纯HTML。您需要将nav.cshtml
转换为nav.html
并在其中使用常规HTML语法。
P.S。有可能使用Razor(cshtml)来响应Durdandal AJAX请求,但这可能是一个复杂的过程,我建议反对。
答案 1 :(得分:0)
我可以肯定地说,你应该使用&#34;路由器&#34;绑定您的主要内容而不是&#34;撰写&#34;绑定你当前正在使用。它会更清洁。您可以找到here的文档。
唯一可以想到的是确保为视图正确设置约定。换句话说,您需要在启动期间在ViewLocator模块上调用viewLocator.useConvention()
,它会看到您的文件结构如下所示:
/App
| - main.js // startup code
| - /views
| | - nav.html
| | - shell.html
| | - home.html
| - /viewmodels
| | - shell.js
| | - home.js
如果你已经完成了所有这些事情,那么在不查看我可能做的所有代码的情况下,我不知道还能说些什么,但这需要一段时间。