fix two-way binding across component boundaries