The problem is that you "bind" all textfields to the last "rating" since it's a private member of your class.
When the "onUpdate" behavior gets called, it will use the rating member that is declared outside the scope of the populate item method thus the one assigned at the last iteration of the listview.
That's why it works for one record. Your current implementation should work for the last "row" only.
The "rating" variable should be declared inside the populate item method.