2015-08-18 3 views
3

Возможно ли получить коллекцию полей в качестве свойства отображаемой модели стекла? Например, у меня есть элемент «Продукт» в Sitecore с коллекцией настраиваемых полей «Атрибут продукта». Я хотел бы иметь доступ к этим полям в виде коллекции, через которую я могу перечислить, без явного называния полей в моей стеклянной модели. Таким образом, я могу добавить больше атрибутов и перечислить их в коде, не меняя код модели стекла.Как получить коллекцию полей в модели Glass?

Что-то вроде следующего:

[SitecoreInfo(SitecoreInfoType.Fields)] 
public virtual IEnumerable<something> Attributes { get; set; } 

Большое спасибо.

+0

Когда вы говорите поля «Атрибут продукта», я полагаю, что они на самом деле являются другими элементами Sitecore, расположенными в другом месте дерева (выбирается с помощью мультилиста или аналогичного)? – jammykam

+0

Это настраиваемые типы полей, которые являются полями шаблона продукта. Они не являются детскими предметами. –

+0

Если они являются полями на вашем шаблоне (по умолчанию или обычаем), то кроме использования отражения я не знаю ни одного способа (и я бы избегал пути отражения). Возможно, вместо этого используйте какие-то инструменты генерации кода или переосмыслите свой дизайн. – jammykam

ответ

2

Без каких-либо специфических особенностей, похоже, что вы можете реализовать Glass Mapper data handler через AbstractSitecoreFieldMapper для вашего нестандартного типа.

+0

Спасибо, что я это расследую. –

+1

Это было хорошее решение. Я написал собственный обработчик данных, который возвратил коллекцию полей Attribute Product. Необходимо было добавить текстовое поле к шаблону продукта, чтобы убедить Glass сделать сопоставление. –

-2

Вы бы на самом деле нужно что-то вроде

[SitecoreInfo (SitecoreInfoType.Fields (Filters = "* .customAttributes", Order = "..."))]

потому что вы должны определить порядок коллекции и способ распознавания предметов, которые будут включены в коллекцию. Лучше не делайте этого и смотрите на более чистое решение.

Например, вы можете указать атрибуты продукта в качестве дочерних элементов или просто присвоить атрибутам свойств реальные имена и ссылаться на них в подъязыке/представлении.

+1

Откуда взялись «SitecoreInfoType.Fields»? Это не в списке допустимых значений перечисления для [SitecoreInfoType] (https://github.com/mikeedwards83/Glass.Mapper/blob/master/Source/Glass.Mapper.Sc/Configuration/SitecoreInfoType.cs) – jammykam

+0

Это просто творчески придумал псевдокод. Думаю, я уже упоминал об этом. –

+1

К сожалению, творчески изобретенные псевдокоды не решают проблем :( – jammykam