method observeArrayValue


void observeArrayValue(PropertyPath name, Object value, Object old)

Source

void observeArrayValue(PropertyPath name, Object value, Object old) {
  final observe = _element._observe;
  if (observe == null) return;

  // we only care if there are registered side-effects
  var callbacks = observe[name];
  if (callbacks == null) return;

  // if we are observing the previous value, stop
  if (old is ObservableList) {
    _observeLog.fine(() => '[$_name] observeArrayValue: unregister $name');

    closeNamedObserver('${name}__array');
  }
  // if the new value is an array, begin observing it
  if (value is ObservableList) {
    _observeLog.fine(() => '[$_name] observeArrayValue: register $name');
    var sub = value.listChanges.listen((changes) {
      for (var callback in callbacks) {
        smoke.invoke(this, callback, [changes], adjust: true);
      }
    });
    registerNamedObserver('${name}__array', sub);
  }
}