Как условно показать / скрыть свойства страницы в 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? Это просто супер простой вопрос по додзё?
Я ценю любую помощь, спасибо заранее!