famo.us/js:将动态数据绑定到click事件以发出数据

时间:2014-08-17 17:58:57

标签: javascript javascript-events event-handling bind famo.us

我想将点击事件绑定到我在数组中收集的曲面。 每次点击都会被触发,我想发一条消息。但每次点击都应该发出自己的数据。我知道我的范围有问题,但我无法弄清楚如何解决它:(

for(var i=0; i < clickableSurfaces.length; i++) {
    clickableSurfaces[i].on('click', function() {
       // output: undefined
       console.log(this.options[i]);

       // output: desired data
       console.log(this.options[0]);

        // emit data another view
       this._eventOutput.emit('foo', {data: this.options[i]});
    }.bind(this));
}

不知何故,我必须让i变量在.on(...)内部工作,但绑定它(.bind(this,i))不起作用。 有谁知道如何解决它或者能指出我正确的方向?

2 个答案:

答案 0 :(得分:1)

在设置侦听器时绑定数据可能更容易。这样您就不会担心传递的对象的索引值。

for(var i=0; i < clickableSurfaces.length; i++) {
    clickableSurfaces[i].on('click', function(data, event) {
        // data = this.options[i]
        console.log(data);

        // emit data to another view
        // this = anotherView in this case
        this._eventOutput.emit('foo', {data: data});
    }.bind(anotherView, this.options[i]));
}

anotherView.on('foo', function(event) {
    // event.data was emitted with the event
    console.log(event.data);
});

答案 1 :(得分:0)

找到解决方案:你不仅要绑定&#34; i&#34;对于该事件,您还必须分配参数&#34; i&#34;这个功能。

完整代码:

for(var i=0; i < clickableSurfaces.length; i++) {
clickableSurfaces[i].on('click', function(**i**) {
   // output: undefined
   console.log(this.options[i]);

   // output: desired data
   console.log(this.options[0]);

    // emit data another view
   this._eventOutput.emit('foo', {data: this.options[i]});
}.bind(this, **i**));
}