2010-09-09 4 views
0

EDIT: Это слишком сложно, я перенесу этот вопрос на другой вопрос и поставил там свой новый код! Пожалуйста, игнорируйте код, потому что он логически ошибочен. (Пожалуйста, проголосуйте, чтобы закрыть этот вопрос, поскольку это не имеет смысла)Сопротивление синтаксису 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(); 
      } 
    }));​ 

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

ответ

2

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

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

Он строит массив строк, удерживая вашу строку-строку.

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

EDIT: По вашему осветлению: я могу обнаружить одну ошибку синтаксиса в конце: Ваш внутренний for -loop не хватает его закрытия }. С другой стороны, я не знаю mootools подробно, так что могут быть проблемы с mootools.

+0

Я отредактирую свой вопрос для уточнения. – Shouvik

+0

Я скорректировал свое сообщение в соответствии с вашими изменениями. – jwueller

+0

эй спасибо! Думаю, мне придется подождать, когда кто-нибудь с опытом mootools придет и разобратся со мной сейчас :) – Shouvik

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); 
    } 
} 

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

0

Я не уверен, что вы имеете в виду, когда вы говорите «замок», но пытаетесь ли вы создать объект, который использует 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

Я отредактировал вопрос, пожалуйста, взгляните и запишите еще раз. Благодарю. – Shouvik

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.)

+0

Спасибо за ответ ур. Я предполагаю, что я могу определить заблокированное состояние для всех функций, используя ваш метод, как другой.Но, пожалуйста, взгляните на функцию оживления. Думаете, я смогу зациклиться так, как я. Это также вызовет ошибки синтаксиса? – Shouvik

+0

Я приложил свой код к своей программе, не могли бы вы взглянуть и сказать мне, если код теперь выглядит хорошо? Благодарю. – Shouvik

+0

Вы говорите 'locked.itemid': это означает свойство *, называемое *' itemid'! Вы имеете в виду 'locked [itemid]', свойство, имя которого хранится в переменной 'itemid'. – bobince

Смежные вопросы