bind method

bool bind(
  1. Observable target
)

Implementation

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

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

      // Find Bind Source
      Observable? source;
      if (binding.scope != null)
           source = System.app?.scopeManager.named(target, binding.scope, binding.key);
      else source = System.app?.scopeManager.scoped(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;
}