Синтаксис JavaScript сомневается? (MooTools) - PullRequest
0 голосов
/ 09 сентября 2010

РЕДАКТИРОВАТЬ: Это стало слишком сложно, я перенесу этот вопрос на другой вопрос и поставлю там мой новый код! Пожалуйста, игнорируйте код этого, потому что он логически некорректен. (Пожалуйста, проголосуйте, чтобы закрыть вопрос, поскольку это не имеет смысла)

Привет

Я инициализирую следующие циклы в своем коде. Код написан с использованием mootools.

CANVAS.init({ canvasElement : 'canvas', interactive : true });

var itemlayer = CANVAS.layers.add({ id : 'items' });

for(var j = 0; j < 5; j++)
{
  for(var i = 0; i < 5; i++)
  {

    itemlayer.add({

        id : 'item-'+i + '-' + j,
        x : 51 * i,
        y : 51 * j,
        w : 50,
        h : 50,
        state : 'normal',
        interactive : true,
        colors : { normal : '#f00', hover : '#00f' },
        events : {
            onDraw : function(ctx){

                    ctx.fillStyle = this.colors[this.state];
                    ctx.fillRect(this.x,this.y,this.w,this.h);

                    this.setDims(this.x,this.y,this.w,this.h);
            }
        }

    });


}

}



/* object that hold the information whether a certain object
 * is in animation right now or not. This is used to prevent
 * multiple Cmorph instances working on the same item
 * */

  var locked= {};
  for(i= 0; i<6; i++)
  for(j= 0; j<6; j++)
  {
    itemid = 'item-'+i+'-'+j;
    itemid : false,
  }
    //then once I have done that
    //animate all items with the function given below

    function animate()
    {
   for(i=0;i<6;i++)
        for(j=0;j<6;j++)
        {
          itemid = 'item-'+i+'-'+j;
          if(locked.itemid)return;  //guess even this will return errors!
      locked.itemid = true;
      var item = CANVAS.layers.get('myLayer').get(itemid);

                  new Cmorph(item,{
                    duration : 1000,
                    transition : 'bounce:out',
                    onComplete : function()
                    {
                        locked.itemid = false;
                    }
                }
      ).morph({
        y : (item.y == 50?375:50),
        scale : (item.scale == 1?2:1)
    });
       }
    }

    CANVAS.addThread(new Thread({
            id : 'myThread',
            onExec : function(){
                    CANVAS.clear().draw();
            }
    }));​

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

Ответы [ 4 ]

2 голосов
/ 09 сентября 2010

Я не совсем уверен, что вы подразумеваете под "блокировкой", но в синтаксисе есть некоторые ошибки. Вот как я бы это сделал:

var locked = [];
for (var i = 0; i < 6; i++) {
    for (var j = 0; j < 6; j++) {
        locked.push("item-"+i+"-"+j);
    }
}

Создает массив строк, в котором хранится ваша строка элемента.

Вы не можете использовать нормальные операторы кода внутри JSON ({}). Вам нужно создать его и заполнить впоследствии, если вам нужно это (более сложное) поведение.

РЕДАКТИРОВАТЬ: В соответствии с вашими разъяснениями: в конце я могу заметить одну синтаксическую ошибку: ваш внутренний for -петл пропускает закрытие }. С другой стороны, я не знаю mootools в деталях, поэтому могут возникнуть проблемы, связанные с mootools.

0 голосов
/ 09 сентября 2010

Это не ясно из вашего вопроса, но я думаю, вы могли бы иметь в виду:

var locked= {};
for(i= 0; i<6; i++)
    for(j= 0; j<6; j++)
        locked['item-'+i+'-'+j]= false;

Имена в JavaScript {name: value} Литералы объектов ограничены строками в кавычках или литералами без кавычек, взятыми как строки, а не как общие выражения. Таким образом, вы не можете иметь имя переменной в литерале объекта. Вместо этого вы должны написать свойство после создания, используя [] доступ. (a['b'] совпадает с a.b.)

0 голосов
/ 09 сентября 2010

Я не уверен, что вы имеете в виду, когда говорите "блокировка", но вы пытаетесь создать объект, который использует itemid s в качестве свойств, которые установлены в false?

/* create empty object */
var locked = {};
/* loop & populate */
for(var i = 0; i < 6; i++) {
    for(var j = 0; j < 6; j++) {
        var itemStr = "item-" + i + "-" + j;
        locked[itemStr] = false;
    }
}

/* use id */
if(!locked["item-0-0"]) {
   // do something
}
0 голосов
/ 09 сентября 2010

Вы не можете заблокировать объект. Вместо этого вы можете использовать массив как заблокированный -

var locked = [];
for (var i = 0; i < 6; i++) { 
    for (var j = 0; j < 6; j++) { 
        var itemStr = "item-"+i+"-"+j;
        locked.push(itemStr); 
    } 
} 

При этом все ваши идентификаторы будут храниться в заблокированном массиве, и вы сможете получить доступ с помощью locked[index]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...