Вместо идентификаторов используйте классы на кнопках удаления. Затем присоедините прослушиватель событий к элементу с идентификатором list
, чтобы перехватывать события щелчка, всплывающие из DOM от кнопок. Присоединение одиночных слушателей к родительским элементам для захвата событий нескольких потомков называется «делегированием событий» . Если вы хотите удалить элемент, вы можете просто удалить его из DOM.
// Grab the list container and add a listener to it
const list = document.querySelector('.list');
list.addEventListener('click', handleClick, false);
function handleClick(e) {
// Destructure the clicked element and grab its
// classList and parentNode
const { classList, parentNode } = e.target;
// If the button is a "delete todo" button
if (classList.contains('delToDo')) {
// Remove the todo completely from the DOM
list.removeChild(parentNode);
}
}
Do homework
Do smth
Вы не можете сериализировать класс, который реализует IDictionary. Проверьте этот ссылка .
Q: Почему я не могу сериализировать хеш-таблицы?
А: XmlSerializer не может обработать классы, реализовав интерфейс IDictionary. Это было частично должно запланировать ограничения и частично вследствие того, что хеш-таблица не имеет дубликата в системе типов XSD. Единственное решение состоит в том, чтобы реализовать пользовательскую хеш-таблицу, которая не реализует интерфейс IDictionary.
, Таким образом, я думаю, что необходимо создать собственную версию Словаря для этого. Проверьте этот другой вопрос .
Словари и Хеш-таблицы не являются сериализуемыми с XmlSerializer
. Поэтому Вы не можете использовать их непосредственно. Обходное решение должно было бы использовать эти XmlIgnore
атрибут, чтобы скрыть те свойства от сериализатора и выставить их с помощью списка сериализуемых пар "ключ-значение".
пз: построение XmlSerializer
является очень дорогим, поэтому всегда кэшируйте его, если существует шанс способности снова использовать его.
В этой статье объясняется, как именно с этим справиться: Как мне ... Сериализовать хеш-таблицу на C #, когда это требуется приложению?
Надеюсь, это поможет
Решение можно найти в Weblog Пола Велтера - XML-сериализуемый универсальный словарь
По какой-то причине универсальный словарь в .net 2.0 не поддерживает сериализацию XML. Следующий фрагмент кода представляет собой сериализуемый универсальный XML-словарь. Словарь можно сериализовать за счет реализации интерфейса IXmlSerializable.
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
[XmlRoot("dictionary")]
public class SerializableDictionary<TKey, TValue>
: Dictionary<TKey, TValue>, IXmlSerializable
{
public SerializableDictionary() { }
public SerializableDictionary(IDictionary<TKey, TValue> dictionary) : base(dictionary) { }
public SerializableDictionary(IDictionary<TKey, TValue> dictionary, IEqualityComparer<TKey> comparer) : base(dictionary, comparer) { }
public SerializableDictionary(IEqualityComparer<TKey> comparer) : base(comparer) { }
public SerializableDictionary(int capacity) : base(capacity) { }
public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer) : base(capacity, comparer) { }
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
bool wasEmpty = reader.IsEmptyElement;
reader.Read();
if (wasEmpty)
return;
while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
{
reader.ReadStartElement("item");
reader.ReadStartElement("key");
TKey key = (TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadStartElement("value");
TValue value = (TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement();
this.Add(key, value);
reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
foreach (TKey key in this.Keys)
{
writer.WriteStartElement("item");
writer.WriteStartElement("key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement();
writer.WriteStartElement("value");
TValue value = this[key];
valueSerializer.Serialize(writer, value);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
#endregion
}