1. допустим есть виджет текстового поля(с множеством значений), естественно у каждого поля свой id в базе и оно уникально, они принадлежат объекту, каждое поле отображается на клиент в виде виджета(в каждом производятся операции например удаление, добавление значения, переименование поля, перерисовка).
2. тогда есть класс виджета тектового поля от которого элементу виджета сопоставляет функции для управления записью в нем, 3. Теперь допустим в объекте 3 поля, на каждое естественно, надо навесить отдельный экземпляр объектов класса WidgetTextField, для этого используется глобальный менеджер, который инициализирует такие объекты для ВСЕХ виджетов на странице. |
допусти в виджете объекта мы раз нажади кнопку добавить поле;
1. поле добавилось 2. происходит рендеринг виджета, в котором менеджер перезапускается кликнули 2 раз, (1,2) выполнилось 2 раза, 3 раз - 4 раза, а менеджер говорит на консоль каждый раз когда запускается |
Но так происходит только в этом виджете, виджет текстового поля при нажатии на кнопку добавляния значения всегда 1 раз срабатывает, и напомню, каждый клик на виджете перезапускает менеджер.
|
Цитата:
Цитата:
|
Никакой не через жопу, все в соответствии с ооп на javascript, если ты не знаком с этим то не надо тут кричать что все через жопу, а вопрос простой и повторю его еще раз: почему после очистки массива хендлеры остаются
|
Manager = function() { // Срабатывает каждый раз при изменении блока #main_frame // Это нужно для того чтобы переинициализировать виджеты this.widgets = []; this.run = function () { console.log("manager runned ..."); w_blocks = $('.widget'); for(i in this.widgets) { delete this.widgets[i]; this.widgets[i] = 0; } this.widgets = []; for (var i = 0; i < w_blocks.length; i++) { $(w_blocks[i]).attr('w_id', i); var options = ($(w_blocks[i]).attr('options')); options = (options == undefined || options =="") ? ",{}" : "," + options; var call_str = "new " + $(w_blocks[i]).attr('widget') + "('[w_id=" + i + "]'" + options + ")"; console.log(call_str); this.widgets[i] = eval(call_str); } }; }; |
Примерный вывод
manager runned ... new ObjectsList('[w_id=0]',{'filters': {'need_fields': False}}) |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
может я что то не понимаю но спрошу !
зачем делать вот так ?? delete this.widgets[i]; /// undefined this.widgets[i] = 0; /// теперь undefined меняешь на 0 this.widgets = []; // и тут полностью очищаешь массив ! покажи как ты вешаешь события и удаляешь !! |
Все правильно понимаешь, ерунду он делает.
Тем более что через delete элементы массива удалять нельзя. |
Часовой пояс GMT +3, время: 05:16. |