Как закрытие JavaScript работает в кинетической форме

Возможный дубликат:
Событие обработчики внутри цикла Javascript - нужно закрытие?

Я новичок в kineticjs. Я сталкиваюсь со сложной проблемой закрытия javascript, когда использую kinetic.shape для рисования непрерывной линии, например

  for(var i = 0; i < 4; i++)
  {
    var y_position = data[i];
    context.lineTo(i*x_position, y_position);
  }

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

    for(var i = 0; i < 4; i++){ 
        var y_position = data[i];
        //document.write("<br/>"+y_position);  (it print 0 1 2 3)
        var line = new Kinetic.Shape({
            drawFunc: function() {
                var context = this.getContext();
                context.lineTo(i*x_position, y_position);
                this.stroke(context);
                //document.write("<br/>"+y_position);  (it print 3 3 3 3)
                },

                stroke: lineColor,
                strokeWidth: 1
            });
            layer.add(line);
    }

person yuki    schedule 14.11.2012    source источник
comment
Спасибо за ответ. да, мне был показан пример закрытия, и я пытаюсь применить его к своему коду, например, drawFunc: function (value) {return function () {context.lineTo (value * x_position, y_position);} (i), stroke: lineColor , strokeWidth: 1}); layer.add (line);}, но он по-прежнему не работает. Можете ли вы четко определить, в чем проблема? И в drawFunc также есть некоторые структурные ограничения, контекст не может быть унаследован до следующей итерации.   -  person yuki    schedule 14.11.2012
comment
Главное, что вам нужно сделать, это убедиться, что y_position передается в качестве параметра функции, которая возвращает фактическую функцию.   -  person Pointy    schedule 14.11.2012