да обход с удалением и инииализацией нулем я для теста сделал, в учебных пособиях говорится что достаточно сделать
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, время: 23:00. |