bind method

bool bind(
  1. Observable target
)

Implementation

bool bind(Observable target) {
  // Bind Target
  if ((target.bindings != null)) {
    bool resolved = true;

    // Process Each Binding
    for (var binding in target.bindings!) {
      String? key = binding.key;

      // Find Bind Source
      Observable? source;
      if (binding.scope != null) {
        source = System.currentApp?.scopeManager
            .findObservableInScope(target, binding.scope, binding.key);
      } else {
        source = System.currentApp?.scopeManager.findObservable(this, binding.key);
      }

      // resolved
      if (source != null) {
        // Remove from Unresolved
        if ((unresolved.containsKey(key)) &&
            (unresolved[key]!.contains(target))) {
          unresolved[key]!.remove(target);
          if (unresolved[key]!.isEmpty) unresolved.remove(key);
        }

        // Register Listener
        source.registerListener(target.onObservableChange);

        // Register Source
        target.registerSource(source);

        // Two Way Listener?
        if (target.twoway == true) {
          // Register Listener
          target.registerListener(source.onObservableChange);

          // Register Source
          source.registerSource(target);

          target.twoway = source;
        }
      }

      // Unresolved
      else {
        resolved = false;

        // Add to Unresolved
        if (!unresolved.containsKey(key)) unresolved[key] = [];
        if (!unresolved[key]!.contains(target)) unresolved[key]!.add(target);
      }
    }

    // Trigger Observable
    if (resolved == true) target.onObservableChange(null);
  }

  return true;
}