Переменные Javascript - требуется переменная переменная - PullRequest
0 голосов
/ 28 сентября 2011

Следующий код требует, чтобы имена двух переменных были объединены.

var myScroll; 
var orderit;
var id;   
$('.scrollable').each(function(){
    orderit += 1;
    $(this).attr('id', 'scrollp' + orderit);
    id = $(this).attr('id');
    myscroll = new iScroll( id );
});

Итак, проблема в том, что переменная my scroll должна быть уникальной каждый раз, поэтому ее имя должно быть myscroll + orderit, но я не могу назвать такую ​​переменную.

Есть идеи, как это сделать.

Marvelous

Ответы [ 2 ]

4 голосов
/ 28 сентября 2011

Сделать myScroll массивом и push() на него:

var myScroll = [];

var orderit;
var id;   
$('.scrollable').each(function(){
   orderit += 1;
   $(this).attr('id', 'scrollp' + orderit);
   id = $(this).attr('id');

   // push another iScroll() onto myScroll
   myScroll.push(new iScroll( id ));
 });

Примечание. В своем коде вы объявили myScroll, но позже используете myscroll. Проверьте разницу в регистре - я исправил это в моем примере.

1 голос
/ 28 сентября 2011

Пытаться динамически генерировать переменные - неправильный подход. Это можно сделать (хотя и не в «строгом режиме») , но это не рекомендуется.

Вместо этого вы должны создавать коллекцию. Вы можете использовать Массив или Объект.


С массивом вы можете использовать .map() для создания коллекции. Затем используйте .toArray() для генерации массива.

var orderit = 0;
var myScroll = $('.scrollable').map(function(){
    this.id = 'scrollp' + (++orderit);
    return new iScroll( this.id );
}).toArray();

... и доступ к ним, как:

myScroll[0];
myScroll[1];
  // ...and so on

Если вместо этого вам нужны имена myScroll1, myScroll2, используйте объект.

var orderit = 0;
var scrolls = {};
$('.scrollable').each(function(){
    this.id = 'scrollp' + (++orderit);
    scrolls[ 'myScroll' + orderit ] = new iScroll( this.id );
});

... и получить к ним доступ как:

scrolls.myScroll1;
scrolls.myScroll2;
  // ...and so on

К вашему сведению: .attr() не нужно, чтобы получить и установить идентификатор элемента. Просто получите к нему доступ с помощью this.id, как я сделал в своем ответе.


РЕДАКТИРОВАТЬ: Я использовал неправильное значение для построения свойств объекта. Исправлено.

...