如何在EPiServer 9 CMS admin / backend中有条件地显示/隐藏页面的属性

时间:2016-05-04 18:54:10

标签: c# dojo episerver

我花了几天时间在这个上敲我的头。网上似乎没有很多例子或资源,所以我希望社区中有人可以帮助我。

我在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问题吗?

我感谢任何和所有的帮助,提前谢谢!

0 个答案:

没有答案