class_docstr: Base class for all objects stored in Bokeh |Document| instances.
  
      
class_docstr_tok: ["Base","class","for","all","objects","stored","in","Bokeh","|Document|","instances","."]
code: def js_on_event(
      self, event: str | type[Event], *callbacks: JSEventCallback
  ) -> None:
      if isinstance(event, str):
          event_name = Event.cls_for(event).event_name
      elif isinstance(event, type) and issubclass(event, Event):
          event_name = event.event_name
      else:
          raise ValueError(
              f"expected string event name or event class, got {event}"
          )
  
      all_callbacks = list(self.js_event_callbacks.get(event_name, []))
  
      for callback in callbacks:
          if callback not in all_callbacks:
              all_callbacks.append(callback)
  
      self.js_event_callbacks[event_name] = all_callbacks
  
imports: from __future__ import annotations
  import logging
  from inspect import Parameter, Signature, isclass
  from typing import TYPE_CHECKING, Any, Iterable
  from ..core import properties
  from ..core.has_props import HasProps, _default_resolver, abstract
  from ..core.property._sphinx import type_link
  from ..core.property.validation import without_property_validation
  from ..core.serialization import ObjectRefRep, Ref, Serializer
  from ..core.types import ID
  from ..events import Event
  from ..themes import default
  from ..util.callback_manager import EventCallbackManager, PropertyCallbackManager
  from ..util.serialization import make_id
  from .docs import html_repr, process_example
  from .util import HasDocumentRef, collect_models, visit_value_and_its_immediate_references
label_desc: Use image node_id 9 for calling the Model obj's underlying member method code with example usage: obj.js_on_event(event) without return types