да обход с удалением и инииализацией нулем я для теста сделал, в учебных пособиях говорится что достаточно сделать
arr = [] или arr.lenth = 0 Вот код одного из виджетов: function ObjectWidget(block, options) { Widget.apply(this, [block, options]); var self = this; self.options.widget = self.block.attr('widget'); self.obj_name = self.block.find('.obj_name').find('span').text(); self.options.obj_id = self.block.attr('obj_id'); self.block.find(".obj_name").click(function(){self.changeName(this)}); self.block.find(".delete").click(function(){self.del()}); self.block.find(".close").click(function(){self.close()}); self.block.find(".add_field").click(function(){self.add()}); var mfHeight = parseInt($('#container').css('height')); var hHeight = parseInt(self.block.find('.obj_w_header').css('height')); self.block.find('.scroll-pane').css('height', mfHeight-hHeight-15+'px'); self.block.find('.scroll-pane').jScrollPane(); } ObjectWidget.prototype.del = function () { this.options.action = "delete"; var result_container = $("#main_frame"); this.render(result_container); }; |
По сути, если удалить объект из массива, должен удалиться и обработчик, или объект не удаляется из за того что ссылка повешена на элементе? Но ведь я заменяю сам элемент либо через replaceWith(ajax_result) либо через html(ajax_result) потом запускаю менеджер
|
ты вешаешь на елемент DOM вот удаляй его или обработчик с него !
я Jquery к счастью плохо знаю но мне кажется что много у тебя обработчиков ! почитай о всплытие ! self.block.find(".obj_name").click(function(){self .changeName(this)}); self.block.find(".delete").click(function(){self.d el()}); self.block.find(".close").click(function(){self.cl ose()}); self.block.find(".add_field").click(function(){sel f.add()}); |
Цитата:
Цитата:
var ajax_result = $.getJSON("./widgets.json"); $(".widgets").replaceWith(ajax_result); Цитата:
Цитата:
|
я не говорю что я ООП мастер и js ниндзя, даже тут javascript.ru корявые статьи про наследование. Проверил это на своем опыте.
|
вешаешь одно события и можно легко управлять хоть 100 виджетами !
|
базовый класс:
function Widget(block, options) { this.options = eval(options); this.block = $(block); var self = this; // this.options.widget = this.block.attr('widget'); this.render = function(result_container) { if (result_container == undefined) result_container = this.block; $.ajax({ url: "/widget/", type: "GET", data: {"options": JSON.stringify(this.options) }, success: function (result) { $(result_container).empty().html(result); // empty добавил только что и тестю manager.run(); } }); }; this.query = function(request_handler) { $.ajax({ url: "/widget/", type: "GET", data: {"options": JSON.stringify(this.options) }, success: function (result) { request_handler(result); } }); }; this.replaceRender = function() { $.ajax({ url: "/widget/", type: "GET", data: {"options": JSON.stringify(this.options) }, success: function (result) { self.block.replaceWith(result); manager.run() } }); }; } |
что у тебя виджет делает ? (для интереса )
|
Цитата:
|
ясно!!
Erolast я не так понял ))) сори за навязывания ошибочного мнения )) |
Часовой пояс GMT +3, время: 08:26. |