Are bindings supposed to tolerate exceptions in their listeners? It seems they don't


#1

I am developing a new project with the latest Ember. I used a component to render an array of objects from a computed property on the controller called filteredData, which returns a subset of another array stored on a property called allData, depending on other properties trimMin and trimMax. I also have a table in the template using {{each}} to render all items in filteredData. This all used to work, until one day I noticed that the table was no longer updating when trimMin and trimMax changed. Also filteredData.length did not change. filteredData was no longer acting like a computed property should.

Meanwhile, this 3rd party component was throwing an exception once when the app first rendered. I was ignoring this for now but wanted my filteredData working. After exhausting all other explanations, it turns out that this one exception was breaking the filteredData binding for all time. I fixed the exception, and the binding now works.

I think of bindings to a property as dependants, like followers or children, while the property being bound to as the parent or superior. What this scenario shows, is that children can break their parent’s binding for all other children for all time with one exception thrown.

Is this a bug, or a design quirk? Are bindings supposed to tolerate exceptions in their listeners?