FLUID-4625: ChangeApplier does not match paths correctly where change is applied at a higher level than listener (fluid.pathUtil.matchPath)

Metadata

Source
FLUID-4625
Type
Bug
Priority
Major
Status
Closed
Resolution
Fixed
Assignee
Antranig Basman
Reporter
Antranig Basman
Created
2012-02-28T17:20:53.269-0500
Updated
2014-03-03T13:00:08.834-0500
Versions
N/A
Fixed Versions
N/A
Component
  1. Framework

Description

In DataBinding.js, line 381 this implementation appears to be have been installed quite deliberately

if (!spec || path === "") {
break;
}
if (!path) {
return null;
}

for reasons which are no longer clear. This fails to notify listeners of changes applied at higher paths - for example, a change at path "selections" does not hit a listener at path "selections.lineSpacing". To be completely accurate, the applier might iterate through subobjects in order to determine the exact set of changes to avoid unnecessarily notifying listeners - but all the same, the current behaviour has to be considered definitely incorrect since there are clearly cases where listeners are not notified when changes occur. This is currently causing problems in the UIOptions-videoPlayer media panel integration work.

Comments

  • Antranig Basman commented 2012-02-29T00:18:19.126-0500

    The supplied fix quickly changes the logic just in matchPath, but the tests we write are against the functional behaviour of model listeners.
    In practice we may want a better implementation which explodes composite changes into
    smaller increments so that we can avoid unnecessary notifications, but this at least covers the case
    of missed notifications

    Note that this logic originally came from
    https://github.com/rsf/PonderUtilCore/blob/master/src/uk/org/ponder/beanutil/support/ListBeanPredicateModel.java
    in this version, the treatment of "spec" and "path" is completely asymmetric, which is at least consistent. It's hard to recall what motivated the current framework "partially asymmetric" version which treats changes at the root differently to those at other places.

  • Michelle D'Souza commented 2012-03-21T15:38:24.560-0400

    Merged into project repo at 1ff854d2bf0a8d71fbb33c9bfb9e70e8dec1c1d6