我正在尝试编写我的第一个简单的Sitecore Speak组件。
没什么好看的,我只需要开始。所以我在Visual Studio中创建了我的Speak组件,在Sitecore中,我的渲染指向了我的组件。这一切都是开箱即用的。我在我的SPEAK布局上插入我的渲染,当我访问该页面时,我收到一个错误说明这一点
任何人都知道为什么?我需要做什么?我正在使用Sitecore 7.5。
我的cshtml看起来像这样:
@using Sitecore.Mvc
@using Sitecore.Mvc.Presentation
@using Sitecore.Web.UI.Controls.Common.UserControls
@model RenderingModel
@{
var rendering = Html.Sitecore().Controls().GetUserControl(Model.Rendering);
rendering.Class = "sc-Test2";
rendering.Requires.Script("client", "Test2.js");
var htmlAttributes = rendering.HtmlAttributes;
}
<div @htmlAttributes>
</div>
答案 0 :(得分:7)
这里的问题基本上是Sitecore SPEAK无法找到您的组件的javascript。
您的SPEAK组件渲染和javascript似乎在您自己的目录中,这是最佳做法。您需要做的是告诉SPEAK在哪里寻找您的组件。这是在Include文件夹中的Sitecore SPEAK配置中控制的。
这是一个补丁包含文件的示例,用于在SPEAK目录中修补以查找javascript组件。
将源设置为包含自定义组件的目录.Deep = true参数将扫描子目录。另请注意此处的类别名称&#34; MikeRobbins&#34;在这个例子中。选择对您的组件有意义的任何内容,我会避免使用Sitecore来不影响sitecore标准组件。
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<speak.client.resolveScript>
<processor type="Sitecore.Resources.Pipelines.ResolveScript.Controls, Sitecore.Speak.Client">
<sources hint="raw:AddSource">
<source folder="/sitecore/shell/client/MikeRobbins/Layouts/Renderings" deep="true" category="mikerobbins" pattern="*.js,*.css" />
</sources>
</processor>
</speak.client.resolveScript>
</pipelines>
</sitecore>
</configuration>
更新您的组件CSHTML并设置userControl.Requires.Script(&#34; mikerobbins&#34; .....部分到您在上面选择的类别名称。请参阅下面的示例。
@using Sitecore.Mvc
@using Sitecore.Mvc.Presentation
@using Sitecore.Web.UI.Controls.Common.UserControls
@model RenderingModel
@{
var userControl = Html.Sitecore().Controls().GetUserControl(Model.Rendering);
userControl.Requires.Script("mikerobbins", "JsonDataSource.js");
userControl.Attributes["type"] = "text/x-sitecore-jsondatasource";
userControl.DataBind = "Json: json";
var htmlAttributes = userControl.HtmlAttributes;
}
<script @htmlAttributes>
</script>
这方面的一个例子可以在我的项目中看到。 https://github.com/sobek1985/SitecoreSPEAKBulkRolePermissions
希望这会有所帮助,任何问题都会给我一个大喊。
答案 1 :(得分:1)
您还可以在Requires.Script方法中指定完整的javascript路径。
rendering.Requires.Script("/sitecore/shell/client/MikeRobbins/Layouts/Renderings/Test2.js");