famo.Us /js:绑定动态数据,点击事件发送数据
famo.us/js: bind dynamic data to click event for emitting data
我想将点击事件绑定到我在数组中收集的表面。每次咔哒声响起,我都想发出一条信息。但每次点击都应该发出自己的数据。我知道我的范围有问题,但我不知道如何解决它:(
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)
)不起作用。有人知道怎么解决这个问题吗或者能给我指出正确的方向吗?
在设置侦听器时绑定数据可能更容易。这样你就不用担心传递的对象的索引值了。
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);
});
找到了解决方案:您不仅必须将"i"绑定到事件,还必须将参数"i"分配给函数。
完整代码:
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**));
}
相关文章:
- 将单击事件添加到数据表
- node.js请求数据事件未在CORS ajax调用中触发
- node exec()未触发所有数据事件
- Node.js输入数据事件停止
- 如何从节点.js请求对象读取数据事件(块)
- IE8:触发“加载元数据”事件
- Firefox 加载元数据事件
- 节点 ssh2 为一个简单的 ls 命令发送多个数据事件
- 未定义的 JWPlayer 元数据事件
- 数据事件未触发节点.js
- 具有多个“数据”事件处理程序和竞争条件的 NodeJS 流
- Nodejs正在侦听来自http.get()的数据事件的响应流
- process.stdin流的可读事件和数据事件有什么区别
- <视频>和加载的元数据事件
- 加载数据事件永远不会触发
- 用于数据事件的JavaScript选择器
- swf加载元数据事件
- 变量未在请求 JS 的数据事件中更新
- Node.js请求数据事件未触发.我做错了什么?
- 在数据事件中访问c3js中的数据值