Работа с атрибутами:
private void WriteMemberDescriptions(Type type)
{
var descriptions =
from member in type.GetMembers()
let attributes = member.GetAttributes<DescriptionAttribute>(true)
let attribute = attributes.FirstOrDefault()
where attribute != null
select new
{
Member = member.Name,
Text = attribute.Description
};
foreach(var description in descriptions)
{
Console.WriteLine("{0}: {1}", description.Member, description.Text);
}
}
GetAttributes
дополнительный метод:
public static class AttributeSelection
{
public static IEnumerable<T> GetAttributes<T>(this ICustomAttributeProvider provider, bool inherit) where T : Attribute
{
if(provider == null)
{
throw new ArgumentNullException("provider");
}
return provider.GetCustomAttributes(typeof(T), inherit).Cast<T>();
}
}
AttributeSelection
производственный код и также определяет GetAttribute
и HasAttribute
. Я принял решение использовать let
и where
пункты в этом примере.
Все виджеты пользовательского интерфейса прикрепляют свое имя как истинное к данным контейнера элемента. jqueryui также добавляет выражение фильтра данных.
var $elem = $('div.sortable-container:data(sortable)');
if ($elem.length){
// $elem contains list of elements that have sortable widget attached
}
Все виджеты пользовательского интерфейса имеют класс ui-widget
. Обычно каждый виджет также добавляет класс виджета к основному элементу. В этом случае вы должны увидеть ui-sortable
, добавленный в сортируемый контейнер.