tldr
- Modify all model properties in the controller rather than the view; let the view have access to the capability via controller functions.
- Keep all magic values (if you must have them at all) in the controller accessing them in the view via controller functions.
- Evaluate all comparison, computation, and logical expressions in the controller, giving the view access to them via controller functions.
- Pass to a controller function only what it does not already know: the loop parameter if in a loop, or no parameters at all if outside of a loop.