Separable, Reactive, Model-Agnostic View Data Binding for JavaScript