我正在构建一个动态页面类型,我想要根据加载在认证ContentArea中的块加载不同的脚本。
这是一个区域:
[AllowedTypes(new[] { typeof(Types.SomeBlockType)})]
public virtual ContentArea SomeArea { get; set; }在我的页面视图中,我呈现内容和脚本:(脚本呈现是通过布局)
@Html.PropertyFor(...)
.
.
@section Scripts {
...//some scripts loaded
}我遇到的问题是,SomeArea内容中块中的脚本在部分脚本之前运行。我希望在我的布局脚本和页面脚本加载之后执行块脚本.
感谢你的帮助。
发布于 2015-08-26 13:31:31
答案非常简单,但首先您的模板必须满足这些客户端资源需求http://world.episerver.com/documentation/Items/Developers-Guide/EPiServer-CMS/75/Client-resources/Client-resources/。本文提到了如何在页面级别注册脚本,在这种情况下,它将被注入到满足要求的所有模板上,即页面类型名称为XFormPage。
但是,假设您只想在页面上使用特定块时注入一个脚本。一种解决方案是使用本文中的方法,然后遍历页面内容区域中的所有块,并查看是否使用了该块。可能不是最聪明和最快的解决方案。
一个更简单的解决方案是在块的视图或控制器中要求脚本:
var clientResources = ServiceLocator.Current.GetInstance<IRequiredClientResourceList>();
clientResources.RequireScript("/scripts/my-block-script.js", "BlockScript", new[] { "ScriptNameThatShouldExecuteBefore" }).AtFooter();如果脚本没有任何依赖项,则可以传递Enumerable.Empty()而不是new[] { "ScriptNameThatShouldExecuteBefore“}。
发布于 2015-08-28 15:15:30
最终我做的是用开关箱设置剃须刀块,
它将查看current的Model.SomeArea.Items() (或Content()),我忘记了,并将查找块类型,将其与我想要的块进行比较,并相应地加载脚本。
https://stackoverflow.com/questions/32224868
复制相似问题