bind method
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;
}