Skip to content

Multilink

Under Construction

This documentation is auto-generated, and is a work in progress. Please see the source code at https://github.com/phetsims/axon/blob/main/js/Multilink.ts for the most up-to-date information.

Overview

Multilink is used to link to multiple properties. It is very similar to a DerivedProperty, but has no value and does not conform to the Property API because it is intended for use with callbacks that do not compute a value.

For situations where a reference to the Multilink instance is not needed (for calling dispose), use convenience methods Multilink.multilink or Property.lazyLink to avoid these types of lint errors:

// lint error: Do not use 'new' for side effects (no-new) new Multilink( ... );

// lint error: 'multilink' is assigned a value but never used (no-unused-vars) const multilink = new Multilink( ... );

@author Sam Reid (PhET Interactive Simulations)

import { Multilink } from 'scenerystack/axon';

Constructor

Instance Methods

dispose()

Static Methods

Registers a listener with multiple properties, then notifies the listener immediately. @param dependencies @param callback function that takes values from the properties and returns nothing

multilinkAny( dependencies : Readonly<TReadOnlyProperty<unknown>[]>, callback : () => void ) : UnknownMultilink

Create a Multilink from a dynamic or unknown number of dependencies.

Registers a listener with multiple properties without an immediate callback with current values. @param dependencies @param callback function that takes values from the properties and returns nothing

lazyMultilinkAny( dependencies : Readonly<TReadOnlyProperty<unknown>[]>, callback : () => void ) : UnknownMultilink

Create a lazy Multilink from a dynamic or unknown number of dependencies.

Unlinks a listener that was added with multilink or lazyMultilink.

Type DependenciesType

import type { DependenciesType } from 'scenerystack/axon';

RP1<T1> | RP2<T1, T2> | RP3<T1, T2, T3> | RP4<T1, T2, T3, T4> | RP5<T1, T2, T3, T4, T5> | RP6<T1, T2, T3, T4, T5, T6> | RP7<T1, T2, T3, T4, T5, T6, T7> | RP8<T1, T2, T3, T4, T5, T6, T7, T8> | RP9<T1, T2, T3, T4, T5, T6, T7, T8, T9> | RP10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> | RP11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> | RP12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> | RP13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> | RP14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> | RP15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>

Type RP1

Exported for the convenience usage sites in Multilink.multilink

import type { RP1 } from 'scenerystack/axon';

Readonly<[ ROP<T1> ]>

Type RP10

import type { RP10 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7>, ROP<T8>, ROP<T9>, ROP<T10> ]>

Type RP11

import type { RP11 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7>, ROP<T8>, ROP<T9>, ROP<T10>, ROP<T11> ]>

Type RP12

import type { RP12 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7>, ROP<T8>, ROP<T9>, ROP<T10>, ROP<T11>, ROP<T12> ]>

Type RP13

import type { RP13 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7>, ROP<T8>, ROP<T9>, ROP<T10>, ROP<T11>, ROP<T12>, ROP<T13> ]>

Type RP14

import type { RP14 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7>, ROP<T8>, ROP<T9>, ROP<T10>, ROP<T11>, ROP<T12>, ROP<T13>, ROP<T14> ]>

Type RP15

import type { RP15 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7>, ROP<T8>, ROP<T9>, ROP<T10>, ROP<T11>, ROP<T12>, ROP<T13>, ROP<T14>, ROP<T15> ]>

Type RP2

import type { RP2 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2> ]>

Type RP3

import type { RP3 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3> ]>

Type RP4

import type { RP4 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4> ]>

Type RP5

import type { RP5 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5> ]>

Type RP6

import type { RP6 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6> ]>

Type RP7

import type { RP7 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7> ]>

Type RP8

import type { RP8 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7>, ROP<T8> ]>

Type RP9

import type { RP9 } from 'scenerystack/axon';

Readonly<[ ROP<T1>, ROP<T2>, ROP<T3>, ROP<T4>, ROP<T5>, ROP<T6>, ROP<T7>, ROP<T8>, ROP<T9> ]>

Marker-like interface for use with Multilink.unmultilink. This provides type safety to make sure unmultilink is called with a type-safe argument.

import type { UnknownMultilink } from 'scenerystack/axon';

Multilink<unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown>

Source Code

See the source for Multilink.ts in the axon repository.