Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Еще раз про очистку массива в js(интересный случай) (https://javascript.ru/forum/misc/53648-eshhe-raz-pro-ochistku-massiva-v-js-interesnyjj-sluchajj.html)

OlegUP 12.02.2015 13:17

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

OlegUP 12.02.2015 13:21

По сути, если удалить объект из массива, должен удалиться и обработчик, или объект не удаляется из за того что ссылка повешена на элементе? Но ведь я заменяю сам элемент либо через replaceWith(ajax_result) либо через html(ajax_result) потом запускаю менеджер

caetus 12.02.2015 13:33

ты вешаешь на елемент 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()});

Erolast 12.02.2015 13:35

Цитата:

объект не удаляется из за того что ссылка повешена на элементе?
Аха.

Цитата:

Но ведь я заменяю сам элемент либо через replaceWith(ajax_result) либо через html(ajax_result) потом запускаю менеджер
Криво, значит, заменяешь. Небось, как-то так?
var ajax_result = $.getJSON("./widgets.json");
$(".widgets").replaceWith(ajax_result);

Цитата:

я Jquery к счастью плохо знаю но мне кажется что много у тебя обработчиков
Не знать серьезно облегчающие жизнь библиотеки можно только к несчастью.

Цитата:

почитай о всплытие !
При чем тут всплытие?

OlegUP 12.02.2015 13:48

я не говорю что я ООП мастер и js ниндзя, даже тут javascript.ru корявые статьи про наследование. Проверил это на своем опыте.

caetus 12.02.2015 13:50

вешаешь одно события и можно легко управлять хоть 100 виджетами !

OlegUP 12.02.2015 13:52

базовый класс:
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()
        }
        });
    };
}

caetus 12.02.2015 13:52

что у тебя виджет делает ? (для интереса )

OlegUP 12.02.2015 13:58

Цитата:

Сообщение от caetus (Сообщение 356367)
что у тебя виджет делает ? (для интереса )

Widget - базовый класс от него наследуются различные классы - списковые(с удалением, добавлением, поиском) загрузка файлов, формирование привязок, виджет текстового поля, скорее всего в следующей версии перейду таки на backbone, спасибо Erolast за совет, хотел попробовать angular, но не стал, времени на то чтобы учить его не было

caetus 12.02.2015 14:00

ясно!!
Erolast я не так понял ))) сори за навязывания ошибочного мнения ))


Часовой пояс GMT +3, время: 08:26.