2009-12-10 81 views
0
   for (iss = 0; iss < listOfProductIds2.length; iss++) 
     { 
      // Alert.show(listOfProductIds2[iss]); 
         var productMain:VBox=new VBox(); 
      var p1:HBox=new HBox(); 
      var l1:Label=new Label(); 
      var b1:Button=new Button(); 
      var spacer:Spacer=new Spacer(); 
      spacer.width=300; 
      b1.label="Remove"; 
      b1.setConstraintValue("id",""); 
      b1.addEventListener(MouseEvent.CLICK,removeProduct); 
      l1.text="Product "+iss; 
      p1.setActualSize(500,500); 
      p1.addChild(l1); 
      p1.addChild(spacer); 
      p1.addChild(b1); 
      productMain.addChild(p1); 
     } 

      function removeProduct(event:MouseEvent):void 
    { 
     // How do i know which button is clicked 
    } 

回答

2

使用event.currentTarget(而不是event.target),因为event.target可能是Label组件或按钮中的一些定型组件,但currentTarget是有保证的是与听众登记的对象。

要获得点击按钮的句柄,您只需将currentTarget投射到一个按钮即可。

function removeProduct(event:MouseEvent):void 
{ 
    var b1:Button = Button(event.currentTarget); 
} 

方法setConstraintValue是用于设定布局约束,不设置ID。 id属性由mxml用于为对象创建变量名称。您可以设置/设置id,因为您可以设置任何其他属性(例如宽度) - 但我没有看到任何人这样做,也没有看到有任何需要这样做的地方。

+0

感谢有关currentTarget的信息。 在这种情况下,设置id可能很有趣,因为按钮是动态创建的,例如: b1.id =“button_”+ listOfProductIds2 [iss]; ..然后你可以检查按钮的ID,看看哪一个被点击。 (虽然这不是很干净,因为它将id和业务相关的信息混合在一起)。 我想这里的问题是要知道对应于按钮的productId。很多方法可以做到这一点......一个ProductButton类可以有一个产品ID作为公共,知道属性......或产品ID和按钮之间的一些映射? – phtrivier 2009-12-10 13:29:12

0

event.target应该指向你点击的按钮,不是吗?但是,您应该可以为按钮设置ID以区分它们(因为您可以动态创建它们)。

+0

确定没问题..但是我怎么知道你点击了哪个ID – 2009-12-10 11:10:51

0

看看event.target

0

如果ID是动态分配的,如给出的例子b1.id = "button_" + listOfProductIds2[iss] 然后处理click事件的函数将查看当前目标,我通常做的是在你知道的id部分做一个字符串替换不像"button_"""那样动态,这会给您留下产品的名称。

相关问题