单击GridLayout ImageSurfaces上的Event

时间:2014-07-15 15:01:00

标签: famo.us

我在Famo.us和JavaScript中真的很新。 基于Timbre示例我试图在PageView上实现GridLayout。 这很好。 现在我计划在每个ImageSurface上做一个点击事件。但那不是那样的。 这是我的代码:

for(var i = 0; i < this.options.imageData.length; i++) {

        this.imageSurfaces.push(new ImageSurface({
            content: this.options.imageData[i].imgUrl,
            size: [200, 200],
            properties: {
               // backgroundImage: this.options.imageData[i].imgUrl,
                color: "black",
                textAlign: 'center'
            }
        }));
        //console.log(i);

        this.imageSurfaces[ii].on('click', function (){
            console.log("Test Click - " + ii + " - " + i);
            console.log(this.imageSurfaces[ii]);
        }.bind(this));

2 个答案:

答案 0 :(得分:0)

我错过了定义ii的位置。

但是,如果将表面存储在临时var中,您就可以使用它来连接处理程序(以及执行其他操作):

var aSurface, i;
//
for(i = 0; i < this.options.imageData.length; i++) {
      aSurface = new ImageSurface({
           content: this.options.imageData[i].imgUrl,
           size: [200, 200],
           properties: {
                // backgroundImage: this.options.imageData[i].imgUrl,
                color: "black",
                textAlign: 'center'
            }
        });
     aSurface.('click', function (){
        console.log("Test Click" + i);
        console.log(aSurface);
    }.bind(this));
})

答案 1 :(得分:0)

您需要将事件处理程序封装在闭包中,否则所有表面都会以相同的单击事件结束。

for (var i = 0; i < this.options.imageData.length; i++) {
    aSurface = new ImageSurface({
        content: this.options.imageData[i].imgUrl,
        size: [200, 200],
        properties: {
            //whatever properties you want
        }
    });
    (function (aSurface) {
        aSurface.on('click', function () {
            console.log(aSurface.options.imageData.imgUrl);
        });
    }(aSurface);
}