6

我正在尝试在 Orchard 中创建一个主题,并在我的布局中添加了一些脚本:

Script.Include("//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js").AtHead();
using (Script.Head()) {
    @:<script>window.jQuery || document.write('<script src="scripts/jquery-1.7.1.min.js"><\/script>')</script>
}

Script.Include("plugins.js").AtHead();
Script.Include("script.js").AtHead();

我想从 Google CDN 加载 jQuery,但如果无法加载 CDN 版本,则有本地回退。为了实现这一点,我在 jQuery 脚本之后添加了脚本块。但是,在查看生成的页面源时,它看起来像:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"  
type="text/javascript"></script>
<script src="/OrchardLocal/Themes/Test/scripts/plugins.js" type="text/javascript">
</script>
<script src="/OrchardLocal/Themes/Test/scripts/script.js" type="text/javascript">  
</script>
<!--[if lt IE 9]>
<script src="/OrchardLocal/Core/Shapes/scripts/html5.js" type="text/javascript">    
</script>
<![endif]-->
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')
</script>

问题是我的后备现在在所有其他脚本之后,而我希望它在 jQuery CDN 脚本包含之后。

有什么方法可以控制 Orchard 渲染内联脚本块的位置吗?

4

1 回答 1

2

Script.Include()当您与Script.Head()或混合时,目前似乎无法控制脚本的顺序Script.Foot()

但是,有一种方法可以将 CDN 与 Orchard 一起使用。但是,不幸的是,它不能正常工作。您应该能够指定Script.Require("jquery").AtHead().UseCdn()处理您在此处尝试执行的操作。这些方法已经存在,但它们不起作用有两个原因:

  1. jQuery 模块目前没有指定 CDN URL
  2. 依赖UseCdn()方法生成脚本标签的方法不能正常工作

已经有关于此问题的报告问题。Orchard CodeplexOrchard 团队将其状态更改为Active希望,该错误将很快得到解决。我已经对这个问题进行了投票,所以你可以向 Orchard 团队发出信号,让他们比其他一些错误更快地解决这个错误。

与此同时,你可以做和我一样的事情——将Document.cshtml模板添加到你的主题中(你可以从 复制它/Core/Shapes/Views/Document.cshtml),找到这一行:(@Display(Model.Head)这是你所有头脚本和样式所在的地方),最后,上面该行您可以添加以下代码:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="@Url.Content("~/Themes/[NAME-OF-YOUR-THEME]/Scripts/jquery-1.7.1.min.js")"><\/script>')</script>

并更改[NAME-OF-YOUR-THEME]为您的主题的文件夹名称。

于 2012-11-29T02:49:43.870 回答