一些java脚本似乎被durandal覆盖了

时间:2014-07-03 17:15:08

标签: single-page-application durandal

我正在尝试使用热毛巾模板实现单页面应用程序。在我尝试合并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>

2 个答案:

答案 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

如果你已经完成了所有这些事情,那么在不查看我可能做的所有代码的情况下,我不知道还能说些什么,但这需要一段时间。