2

我如何成功传递和传递可触摸对象的 id。

for(var i = 0; i < datasource.length;i++){

var currentIndex = i;
this.viewCollection.push(

<TouchableHighlight onPress={() => this.handleItemTouch(currentIndex)} >

</TouchableHighlight>

 );
}

  handleItemTouch(i) {
  //i is every time equal to datasource.length

//基于“i”我想滚动到某个地方}

我想要做的是,基于哪个touchablehighlight被按下来滚动滚动视图到基于“i”参数的轴坐标

4

2 回答 2

9

由于您使用的是 var,因此 currentIndex 变量不是块范围的。

例如,第一次迭代会将 设置currentIndex为 1,因此如果您单击 touchablehighlight ......它将是正确的索引,但对于之后的每次迭代,它将更新currentIndex所有 touchablehighlight 上的 。

这就是为什么 currentIndex 将始终是您单击的任何一个数据源的长度。您可以通过使用let或使用像 forEach/map 这样具有不同执行上下文的迭代器来解决此问题。

for (let i = 0; i < datasource.length; i++){

this.viewCollection.push(

<TouchableHighlight onPress={() => this.handleItemTouch(i)} >

</TouchableHighlight>

 );
}
于 2017-02-09T16:17:43.163 回答
5

您可以Function.prototype.bind用于这些事项。例如

<TouchableHighlight onPress={this.handleItemTouch.bind(this, currentIndex)} ></TouchableHighlight>

然后在你的 handleItemTouch 上:

handleItemTouch(index) {
    //do stuff
}
于 2017-02-09T13:03:47.390 回答