make components responsible for their own event binding