Создание нескольких экземпляров gridster в цикле с замыканиями для вызова одних и тех же обратных вызовов с разными аргументами

В настоящее время я работаю над модулем CMS на основе gridster, и это необходимо, чтобы конечный пользователь мог создавать разные макеты, чтобы создавать экземпляр gridster несколько раз.

Моя проблема возникает, когда я перебираю номер сетки, который должен быть установлен, и пытаюсь определить обратные вызовы, которые должны вызываться с разными аргументами на основе итерации, в которой они определены: когда я их тестирую, кажется, что они наследуют (последний ) одинаковое значение.

Я думаю, что это вопрос закрытия, и я пытаюсь решить это, даже читая несколько сообщений с этого форума, но безуспешно, и я очень признателен, если кто-то может дать мне подсказку, чтобы выбрать правильный путь.

вот мой код:

var gridster= [];

var id_layouts = [];

$(".selectedLayout").each(function(){

    id_layouts.push($(this).val());

});

for(i=0; i<id_layouts.length; i++){

    makeGridster(i, id_layouts[i]);

}

function makeGridster(index, id_layout){

    gridster[index] = $('#blockcompositeGrid'+id_layout+' > ul').gridster({
        widget_margins: [10, 10],
        widget_base_dimensions: [100, 100],
        draggable:{
            stop: function(){

                return function(i, l){
                    updateSerialization(i, l)
                }(index, id_layout)
            }
        }
    }).data('gridster');

}

function updateSerialization(index, id_layout){

  console.log(index, id_layout);

    }

Сетки строятся, это нормально. Как видите, я пытаюсь вызвать функцию обратного вызова остановки действия перетаскивания, и она должна вызываться с другими аргументами. Я нашел это, которое кажется похожим к тому, что мне нужно, но, к сожалению, я ничего не знаю о coffeescript и из документации coffescript для 'do' (coffescript.org) Я не вижу, что делаю не так. Спасибо заранее за любую помощь


person user3162406    schedule 05.01.2014    source источник


Ответы (1)


Попробуйте использовать другое имя переменной, отличное от i, в цикле и определении функции остановки. Из-за области видимости они могут наступать друг на друга. Также определите i в цикле с var, ссылка на переменную/свойство без var делает его глобальным.

Какова цель ключевого слова var и когда его использовать это (или опустить)?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for

person Sam Nunnally    schedule 05.01.2014
comment
спасибо за ответ, это хорошие советы, хотя и не решили проблему - person user3162406; 05.01.2014