Docking

When a dizmo is moved close to another, dizmoViewer asks both of them if they allow docking. If at least one of them answers with true dizmoViewer will display a visual feedback about the docking to the user.

You can allow docking by setting the parameter to true (default is false) in the function dizmo.canDock. However, for a successful docking, both dizmos have to set this parameter to true.

// disable docking
dizmo.canDock(false);

// enable docking
dizmo.canDock(true);

The function dizmo.onDock will notify you when another dizmo tries to dock to yours.

dizmo.onDock(function(dockingDizmo) {
    console.log('Docked to dizmo with id ' + dockingDizmo.identifier);
});

The function dizmo.onUnDock will notify you when an already docked dizmo undocks, that is disconnects.

dizmo.onUndock(function(dockingDizmo) {
    console.log('Undocked from dizmo with id ' + dockingDizmo.identifier);
});

Make data available for the docked dizmo

Docked dizmos can read and write to any property in the public part of the docked dizmos' storage. A convention is to use the stdout property for docking.

dizmo.publicStorage.setProperty('stdout', 'hello docked dizmo!');
dizmo.publicStorage.getProperty('stdout');

Note: If you have any data which could be used by any other dizmo, write them to your publicStorage! There may be a use-case you have not thought of yet, but other developers will!

You have two possibilities to exchange data between docked dizmos. The first is to exchange data once "by contact", that is when the dizmos are docked or one dragged onto another, and the second is a constant exchange.

Exchange data once

We illustrate how to exchange data when the docking occurs. First, we need to be notified about a dizmo docking to ours, then we grab the stdout value from the docked dizmo:

dizmo.onDock(function(dockingDizmo) {
    var stdout = dockingDizmo.publicStorage.getProperty('stdout');
    // do something with the stdout variable
});

Constant data exchange

To constantly monitor data, use the subscribeTo function (or subscribeToRecursive for grouped data):

var subscriptionId;

dizmo.onDock(function(dockingDizmo){
    subscriptionId = dockingDizmo.publicStorage.subscribeToProperty('stdout', handleDataChange);
});

function handleDataChange(path, val, oldVal) {
    var stdout = val;
    // do something with the stdout variable
}

Remember to cancel the subscription once the dizmos are undocked. To cancel the subscription made above, you would use

dizmo.onUndock(function(undockedDizmo) {
    dizmo.publicStorage.unsubscribeProperty(subscriptionId);
});