在页面脚本加载后呈现块脚本(EPI 8/ MVC)



我正在构建一个动态页面类型,我想根据在某个ContentArea中加载的块加载到它的不同脚本。

这是区域:

[AllowedTypes(new[] { typeof(Types.SomeBlockType)})]
public virtual ContentArea SomeArea { get; set; }

在我的页面视图我渲染的内容和脚本:(脚本渲染是通过布局)

@Html.PropertyFor(...)
.
.
@section Scripts {
    ...//some scripts loaded
}

我遇到的问题是,在SomeArea内容块内的脚本,在部分脚本之前运行。我希望块脚本执行后,我的布局脚本&页面脚本被加载…

感谢您的帮助。

答案很简单,但首先您的模板必须满足这些客户端资源需求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"}

最后我做的是设置一个剃刀块与开关箱,

它将查看当前的Model.SomeArea.Items()(或Contents()),我忘记了,并将查找块类型,将其与我想要的块进行比较,并相应地加载脚本。

相关内容

  • 没有找到相关文章

最新更新