我花了几天时间在这个上敲我的头。网上似乎没有很多例子或资源,所以我希望社区中有人可以帮助我。
我在EPiServer中有一个Page,它有一个标记为SelectOne(下拉列表)的int属性。我需要有条件地显示/隐藏页面类型的另一个属性。我在网上看到this示例。我可以按照书面形式开始工作,但第二次我尝试修改它(凭借我非常有限的知识)它停止工作。
这是我在EPiServer中的页面:
//'SitePageData' extends page data but is prolly irrelevant to this question
[ContentType]
public class LocationPage : SitePageData
{
[CultureSpecific]
[Display(
Name = "Location Type",
Description = "",
GroupName = SystemTabNames.Content,
Order = 10)]
[SelectOne(SelectionFactoryType=typeof(LocationTypeSelectionFactory))]
[UIHint("LocationType")]
public virtual int LocationType { get; set; }
[CultureSpecific]
[Display(
Name = "Address Key",
Description = "",
GroupName = SystemTabNames.Content,
Order = 20)]
public virtual string AddressKey { get; set; }
//........Rest of class properties here.......
}
这是我的编辑描述符:
[EditorDescriptorRegistration(TargetType=typeof(string), UIHint="LocationType")]
public class LocationTypeEditorDescriptor : EditorDescriptor
{
public override void ModifyMetadata(EPiServer.Shell.ObjectEditing.ExtendedMetadata metadata, IEnumerable<Attribute> attributes)
{
ClientEditingClass = "alloy/LocationType";
base.ModifyMetadata(metadata, attributes);
}
}
这是我的JS文件(LocationType.js),位于/ ClientResources / Scripts /文件夹中
define([
"dojo/_base/declare",
"dojo/_base/lang",
"epi/shell/layout/SimpleContainer"
],
function (
declare,
lang,
SimpleContainer
) {
return declare([SimpleContainer], {
addChild: function (child) {
// Summar: Add a widget to the container
this.inherited(arguments);
if (child.name.indexOf("locationtype") >= 0) {
this.own(child.on("change", lang.hitch(this, this._updateDropdown)));
},
_updateDropdown: function (obj) {
console.log(obj.value);
}
}
});
});
正如您所看到的,我只是想尝试注册一个on change事件(就像上面的链接示例一样)。我认为这是我需要选择性地隐藏“AddressKey”字段所需的关键功能。如你所见,我还没有解决第一个问题。
我认为我的一个问题是我可能在dojo中扩展了错误的容器类型。但是,我不知道肯定知道。
有人在EPiServer中实现了类似的功能吗?这只是一个超级简单的Dojo问题吗?
我感谢任何和所有的帮助,提前谢谢!