У меня острая проблема, и хотя ответ может быть очевидным, я не могу понять, как сделать то, что я пытаюсь сделать.
Я создал библиотеку сценариев для своего приложения, использующего JSпрототипы и шаблоны для динамического создания элементов DOM и связывания этих элементов с обработчиками.Пример:
var ppane = new AWP.iuiPanel(theObject, { title: 'Select filter(s)', idDisplay: 'block', idString: params.sender._options['title'] });
AWP.iuiPanel - это класс, определенный как прототип функции, например:
AWP.iuiPanel = function() { <i'm a constructor> }
AWP.iuiPanel.prototype = { <a bunch of methods here> }
Методы внутри экземпляра создают элемент DOM (в этомслучай плавающей панели) и установить для него привязки событий, подключить элементы управления и т. д.
Преимущество перехода по этому пути заключается в том, что с помощью одного вызова для создания нового экземпляра класса я также могусоздайте связанный элемент DOM и, после создания экземпляра, методы класса, которые были подключены, будут выполняться с элементом для выполнения таких операций, как позиционирование его относительно целевого объекта, реагирование на соответствующие события браузера и т. д.
* 1012у меня проблема, когда я хочу избавиться от этой конструкции.Я могу легко избавиться от элемента DOM.Но тогда у меня все еще есть экземпляр класса в памяти с методами, связанными с событиями браузера, ища элемент DOM, который был удален.Мне нужно иметь возможность распоряжаться не только элементом DOM, но и экземпляром класса, и я не могу понять, как это сделать.
Как можно избавиться от прототипа функции после объявления?Кажется, это должно быть просто, но я нахожу, что это определенно не так.
Для справочной информации, вот пример класса, как я его определяю:
Это обязательно псевдокод (ish) ...
AWP.trivialExample = function(someDomRef, someOptionSet) {
this._id = someOptionSet['name'];
this._width = someOptionSet['width'];
this._width = someOptionSet['height'];
this._domRef = someDomRef;
this._object = '';
this.constructDOM();
this.wireEvents();
}
AWP.trivialExample.prototype = {
constructDOM: function() {
// build a complex DOM element relative to a provided DOM ref using the
// desired and height. This uses a template and I won't give a precise example
// of such a template.
jQuery("#aTemplate").tmpl(someJSONData).appendTo("body");
},
positionRelative: function() {
// this function would get the location of a specific DOM ref and always maintain
// a relative position for the DOM element we just constructed
},
wireEvents: function() {
// hook up to events using JQuery (example)
jjQuery(window).resize(this.positionRelative);
}
}
Выше приведен тривиальный пример, который будет принимать ссылку на объект DOM, а затем динамически создавать новый элемент DOM и связыватьвплоть до событий браузера, чтобы всегда поддерживать относительную позицию между этими двумя объектами при размере страницы.
Когда я избавляюсь от нового объекта, мне также нужно избавиться от экземпляра класса, и я не могу найти простой способсделайте это.
Вся помощь оценена.
Спасибо;