JavaScript语法疑问? (mootools的)

时间:2010-09-09 10:21:11

标签: javascript mootools

编辑:这太复杂了,我会将这个问题迁移到另一个问题并在那里提出我的新代码!请忽略此代码,因为它在逻辑上存在缺陷。 (请投票以关闭问题,因为它没有意义)

您好,

我正在我的代码中初始化以下循环。代码是用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();
            }
    }));​

我的语法是否正确,所有ID都会被锁定,或者我是否会出错。如果我犯了错误,请你纠正我。我知道这是一个非常愚蠢的怀疑,但请耐心等待!谢谢:))

4 个答案:

答案 0 :(得分:2)

我不确定“锁定”是什么意思,但语法有一些错误。我就是这样做的:

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

它构造一个字符串数组,保存你的item-string。

您不能在JSON({})中使用普通代码语句。如果您需要这种(更复杂的)行为,您需要创建它并在之后填充它。

编辑:根据您的澄清:我可以在最后发现一个语法错误:您的内部for - 循环错过了他的结束}。另一方面,我不太了解mootools,所以可能会出现与mootools相关的问题。

答案 1 :(得分:0)

您无法锁定对象。相反,您可以将数组用作锁定 -

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

这会将所有ID存储在已锁定的阵列中,您可以使用locked[index]

进行访问

答案 2 :(得分:0)

当你说“锁定”时,我不确定你的意思,但是你是否试图创建一个使用itemid作为属性的对象,这些属性设置为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
}

答案 3 :(得分:0)

你的问题并不清楚,但我认为你的意思可能是:

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相同。)