ViewRegistry handles the association between model and view
types in Atom. We call this association a View Provider. As in, for a given
model, this class can provide a view via ::getView, as long as the
model/view association was registered via ::addViewProvider
If you're adding your own kind of pane item, a good strategy for all but the simplest items is to separate the model and the view. The model handles application logic and is the primary point of API interaction. The view just handles presentation.
Note: Models can be any object, but must implement a
if they are to be displayed in a Pane
View providers inform the workspace how your model objects should be presented in the DOM. A view provider must always return a DOM node, which makes HTML 5 custom elements an ideal tool for implementing views in Atom.
You can access the
ViewRegistry object via
Add a provider that will be used to construct views in the workspace's view layer based on model objects in its model layer.
Text editors are divided into a model and a view layer, so when you interact
with methods like
atom.workspace.getActiveTextEditor() you're only going
to get the model object. We display text editors on screen by teaching the
workspace what view constructor it should use to represent them:
atomviewsaddViewProvider TextEditortextEditorElement =textEditorElementinitializetextEditortextEditorElement
Constructor Function for your model. If a constructor is given, the
Factory Function that is passed an instance of your model and must return a subclass of
Returns a Disposable on which
Get the view associated with an object in the workspace.
If you're just using the workspace, you shouldn't need to access the view layer, but view layer access may be necessary if you want to perform DOM manipulation that isn't supported via the model API.
View Resolution Algorithm
The view associated with the object is resolved using the following sequence
- Is the object an instance of
HTMLElement? If true, return the object.
- Does the object have a method named
getElementthat returns an instance of
HTMLElement? If true, return that value.
- Does the object have a property named
elementwith a value which is an instance of
HTMLElement? If true, return the property value.
- Is the object a jQuery object, indicated by the presence of a
jqueryproperty? If true, return the root DOM element (i.e.
- Has a view provider been registered for the object? If true, use the provider to create a view associated with the object, and return the view.
If no associated view is returned by the sequence an error is thrown.
Returns a DOM element.