$('a.policyBreach').bind('click mouseover', function (e) {
if (event.type === "mouseover") {
if($(this).hasClass("thumbs-up")) {
// handle the value for thumbs-up
} else {
// handle the value for thumbs-up
}
// Need to Store differnt values for icons for Thumbs UP, and Thumbs Down respectively.
} else if (event.type === "click") {
blockStatus=1;
$(this).closest('tr').find('input:checkbox').prop('checked', !0);
$('.overLayDiv').addClass('active');
$('.disableBlock').addClass('no-active');
$("#duplicateExpense").css('display','none');
$('#policyViolation').css('display','block');
$('#policyViolation').css('width','100%');
$('#policyViolation #btnRejectPayment-PV').css('display','none');
$('#policyViolation #closeRightSlider').css('display','block');
$('.rightSliderBg2').css('width','50%').addClass('active');
}
});
Это похоже на динамические свойства для объекта. C# является не совсем динамическим языком в отличие от JavaScript, или возможно PHP может проанализировать свойства объектов на лету. Следующие два метода - то, о чем я могу думать. Второй мог бы вписаться в Ваши требования.
KISS путь
Содержание Это Простой Глупый путь
public class StorageObject {
public string Name { get; set; }
public string Birthday { get; set; }
public List<string> OtherInfo { get; set; }
}
У Вас могут быть пары значение-имя, который разделяется '|'
OtherInfo = {"Hobbies|Programming", "Website|Stackoverflow.com"}
Сериализированные формы
<StorageObject>
<Name>Matthew</Name>
<Birthday>Jan 1st, 2008</Birthday>
<OtherInfo>
<string>Hobbies|Programming</string>
<string>Website|Stackoverflow.com</string>
</OtherInfo>
</StorageObject>
Динамический путь в C#
Заставьте часть пары значение-имя стать элементом XML так, чтобы можно было создать ее динамично.
public class StorageObject {
public string Name { get; set; }
public string Birthday { get; set; }
public XElement OtherInfo { get; set; } // XmlElement for dot net 2
}
Можно легко создать объект OtherInfo как центральный элемент, например.
XElement OtherInfo = new XElement("OtherInfo");
OtherInfo.Add( ..Hobbies xelement & text value..);
OtherInfo.Add( ..WebSite xelement & text value..);
Сериализированная форма будет
<OtherInfo>
<Hobbies>Programming</Hobbies>
<Website>Stackoverflow.com</Website>
</OtherInfo>
или создайте его как центральный атрибут
XElement OtherInfo = new XElement("OtherInfo");
OtherInfo.Add( ..nvp xattribute Hobbies & value..);
OtherInfo.Add( ..nvp xattribute WebSite & value..);
<OtherInfo>
<nvp n="Hobbies" v="Programming" />
<nvp n="Website" v="Stackoverflow.com" />
</OtherInfo>
Для любого динамического языка это может получить доступ к свойствам непосредственно. Для остальных они могут получить доступ к значению чтением XML. Чтение XML хорошо поддерживается большей частью платформы.
Взгляните в Систему. Xml. Сериализация. Атрибут XmlSerializerAssemblyAttribute. Это позволяет Вам указать пользовательский сериализатор уровня класса. Вы сможете выложить безотносительно XML Вам нравится.
Быстрый способ набрать скорость на них состоит в том, чтобы использовать sgen.exe, чтобы генерировать один и посмотреть на него с Отражателем.
- Oisin
Я не уверен, что это решило бы Вашу проблему (она будет в C#, но возможно не в PHP), но попытайтесь использовать Dictionary<string,List<string>> OtherInfo
вместо List<NameValuePairs>
. Затем "Хобби" и "Веб-сайты" были бы Вашими ключами, и значения будут списком хобби или веб-сайтов. Я не уверен, как это сериализировало бы, все же.
Вы смогли бы сослаться на списки хобби как:
List<string> hobbies = storageObject.OtherInfo["Hobbies"];
[РЕДАКТИРОВАНИЕ] Видит здесь для универсального сериализуемого словаря XML. Этот производный класс является тем, который необходимо было бы использовать вместо универсального Словаря.
Это - то, на чем я обосновался.
Структура класса:
public class StorageObject {
public string Name { get; set; }
public string Birthday { get; set; }
[XmlAnyElement("Info")] // this prevents double-nodes in the XML
public XElement OtherInfo { get; set; }
}
Использование:
StorageObject o = new StorageObject();
o.OtherInfo.Add(new XElement("Hobbies","Programming");
o.OtherInfo.Add(new XElement("Website","Stackoverflow.com");
Вывод:
<Info>
<Hobbies>Programming</Hobbies>
<Website>Stackoverflow.com</Website>
</Info>
Я хотел бы благодарить всех за их помощь, я действительно ценю справку и идеи.
Как совершенно другое взятие на этом, почему бы не думать о выполнении его полностью по-другому. Имейте один метод веб-сервиса для возврата сериализированного объекта хранения, минус OtherInfo
и другой метод для возврата списка свойств (ключи) для OtherInfo
, и одна треть для возврата списка значений для любого ключа. Предоставленный, это предпримет более путешествия в прямом и обратном направлениях в веб-сервис, если Вы захотите все данные, но решение будет намного более простым и более гибким.
[Serializable]
public class StorageObject {
public string Name { get; set; }
public string Birthday { get; set; }
[Nonserializable]
public Dictionary<string,List<string>> OtherInfo { get; set; }
}
[WebMethod]
public List<StorageObject> GetStorageObjects() {
// returns list of storage objects from persistent storage or cache
}
[WebMethod]
public List<string> GetStorageObjectAttributes( string name )
{
// find storage object, sObj
return sObj.Keys.ToList();
}
[WebMethod]
public List<string> GetStorageObjectAtributeValues( sting name, string attribute )
{
// find storage object, sObj
return sObj[attribute];
}