我在一些遗留代码中注意到以下模式:
<script>
<!--
// code
// -->
</script>
Run Code Online (Sandbox Code Playgroud)
经过一些研究,这似乎是一种非常古老的技术,用于在浏览器不支持该<script>
元素时从DOM中隐藏脚本元素的内容.更多信息可以在这里找到.
我担心的是:为什么不<!--
抛出语法错误?我在whatwg.org的网站上发现了它<!--
应该在功能上等同于//
它,并且它链接到ECMAScript语法中关于注释的片段.问题是,<!--
该语法根本没有定义.
所以这似乎是所有主流浏览器都会实现的未定义行为.是否有允许这样的规范,或者这是一个人们提出的向后兼容性黑客攻击?
假设项目中存在一个呈现无序列表的表示组件(可能称为ListRenderer).我们有几个选项可以向页面上任何给定的ListRenderer提供数据:
我通常在我的项目中避免使用#1,因为它将Sublayouts绑定到模板,这会非常混乱.如果沿着这条路走下去,最终你将拥有支持项目中每个潜在子布局的字段.
所以我的解决方案倾向于选项#2,它摆脱了这个问题.然而,它确实带有一系列问题.我在哪里为给定的ListRenderer使用这些不同的"列表"?为了最大化重用和共享,我通常在站点根目录附近创建一个包含所有这些类型的组件的组件目录,如果我预测将共享列表.对于内容作者来说,这似乎更难找到并且更难以使用,他们突然不知道他们的ListRenderer的来源在哪里,除非他们知道如何破解演示细节(这对我的普通用户来说略微提前).
如果我觉得列表不会被共享,并且非常特定于页面,我会将它们直接放在相关项目的下方.然而,这倾向于混淆内容树,并且任何动态生成的导航子布局然后必须在其生成到其的链接之前检查项目是否是实际页面.我在Sitecore中工作的越多,我使用这种方法的次数就越少,但对内容作者来说似乎更容易.使用此方法时,可以更轻松地访问信息.
是否有任何行业认可的方法来解决这个问题?它始终在项目中发生,在我的脑海中,我努力在这些情况下平衡技术和内容作者关注问题.
我正在尝试在工作流程命令上实现一个基本的Javascript确认框(例如"你确定要编辑它吗?").根据用户是单击是还是否,我想转到工作流程中的其他状态.这是我目前的代码(取出一些逻辑):
[Serializable]
public class ConfirmAction
{
public void Process(WorkflowPipelineArgs args)
{
Item currentItem = args.DataItem;
ClientPipelineArgs clientArgs = new ClientPipelineArgs();
Sitecore.Context.ClientPage.Start(this, "DialogProcessor", clientArgs);
}
protected void DialogProcessor(ClientPipelineArgs args)
{
if (args.IsPostBack)
{
if (args.Result != "yes")
{
args.AbortPipeline();
return;
}
}
else
{
Sitecore.Context.ClientPage.ClientResponse.Confirm("Are you sure you want to edit this?");
args.WaitForPostBack();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我是Pipeline模型的新手,特别是与Sitecore有关,所以我有点掌握稻草.我相信,我遇到的问题是,我没有办法将结果从ClientResponse管道返回到工作流管道,告诉它该做什么.
谢谢.
编辑:
使用Yan的信息,我最终想出了以下解决方案:
public void Process(WorkflowPipelineArgs args)
{
Item currentItem = args.DataItem;
ClientPipelineArgs clientArgs = new ClientPipelineArgs();
clientArgs.Parameters.Add("itemID", currentItem.ID.ToString());
clientArgs.Parameters.Add("stateID", currentItem.Fields["__Workflow state"].Value);
Sitecore.Context.ClientPage.Start(this, "DialogProcessor", …
Run Code Online (Sandbox Code Playgroud) 我正在Sitecore中实现工作流程,为此我设置了几个具有角色的不同用户,其中角色的安全性决定了工作流程(没什么不寻常的).
其中一个角色是"CMS发布者",它的工作是在审核过程中排在最后,并在项目被接受后发布.问题是在"发布"选项卡中,没有"发布"按钮.我知道一旦项目进入最终状态就可以自动发布,但我希望这个角色也可以访问该按钮.我认为它是某个内容项目的安全设置,但是我搜索了核心/主数据库无济于事,并且sdn提供了零信息.
感谢您的时间.
我的逻辑类似于下面的代码.好像为了检查这样的空引用,我必须有两个单独的Select语句.linq忍者可以告诉我这样的查询可以改进吗?
List<C> cList = Globals.GetReferences(irrelevantThing) // GetReferences returns List<A>, which are references to B
.Select(a => a.GetB()) // GetB returns type B, can be null
.Where(b => b != null && someOtherConditions)
.Select(c => new C(b)) // C Constructor cannot have a null parameter
.ToList();
Run Code Online (Sandbox Code Playgroud)
谢谢.
编辑:稍微清理一下示例代码.
我正在尝试调用保存用户信息的Web服务.实质上,返回一个'completion'对象,其中包含服务调用的结果.我的代码可以压缩如下:
public bool SaveUserInformation(ArgsList args) {
CompletionObject results = SaveService(args);
if (results.Status == Failed)
throw SomeException("onoez D:");
return true;
}
Run Code Online (Sandbox Code Playgroud)
本质上,此方法返回一个布尔值,但该值永远不会为false.这对我来说有点奇怪,所以有更好的方法来解决这个问题吗?
谢谢!