Как условно показать / скрыть свойства страницы в EPiServer 9 CMS admin/backend

Я провел несколько дней, стуча головой об этом. Кажется, что в Интернете не так много примеров или ресурсов, поэтому я надеюсь, что кто-то из сообщества сможет мне помочь.

У меня есть страница в EPiServer, которая имеет свойство int, помеченное как SelectOne (раскрывающийся список). Мне нужно условно показать / скрыть другое свойство типа страницы. Я наткнулся на этот пример онлайн. Я могу заставить его работать как написано, но во второй раз, когда я пытаюсь изменить его (с моими очень ограниченными знаниями), он перестает работать.

Это моя страница в 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);
            } 
        }
    });
});

Как вы можете видеть, я просто пытаюсь зарегистрировать событие при изменении (как в приведенном выше примере). Я предполагаю, что это ключевой функционал, который мне понадобится, чтобы выборочно скрыть поле "AddressKey". Как видите, я еще не решил первую проблему.

Я думаю, что одна из моих проблем заключается в том, что я потенциально расширяю неправильный тип контейнера в dojo. Я не знаю достаточно, чтобы знать наверняка, однако.

Кто-нибудь реализовывал подобный функционал в EPiServer? Это просто супер простой вопрос по додзё?

Я ценю любую помощь, спасибо заранее!

0 ответов

Другие вопросы по тегам