What is wrong with your translation? Doesn't that work? The only thing I can see right away is that you are not listening on the button:
button(x) listenTo button(x)
But I'm not sure how wise the button is listening to itself, or there are any unpleasant consequences. You do not need to add reactions to the button itself, you could probably add them to the date creator itself.
, - zipWithIndex , :
buttons.zipWithIndex foreach { case (button, x) =>
}