In the context of Elementor, it uses a kind of MVC (Model-View-Controller) pattern:
- Model – Represents the data structure. It’s a representation of an entity (like a control, element, section, etc.), and it holds the data structure and some logic around it. The data here refers to attributes of the control (like
label,type,description, etc.). - View – Represents the visual representation of the model. In Elementor, this usually maps to a specific UI element (like a button, input field, toggle, etc.). The view is responsible for rendering the control based on its model, handling user interactions, and reflecting any changes back to the model.
getEditorControlModel function
This function fetches the model of a control based on its name:
function getEditorControlModel( controlName ) {
const editor = elementor.getPanelView().getCurrentPageView();
return editor.collection.findWhere( { name: controlName } );
}
- Here,
elementor.getPanelView().getCurrentPageView()gets you the current page or section being edited in the Elementor editor. - The
editor.collectionis a collection (think of it as an array) of all controls present in the current view. findWhere({ name: controlName })searches this collection to find the control with the specified name.
The output you get (with attributes, cid, etc.) is typical of a Backbone.js Model. Elementor relies heavily on Backbone.js, which is a JavaScript library that provides the MVC structure.
getEditorControlView function
This function fetches the view of a control based on its name:
function getEditorControlView( controlName ) {
const editor = elementor.getPanelView().getCurrentPageView();
const model = getEditorControlModel( controlName );
if (model) {
return editor.children.findByModelCid( model.cid );
}
return null;
}- First, it fetches the model of the control using
getEditorControlModel. - Then, using
findByModelCid( model.cid ), it fetches the view associated with this model. Thecidis a client ID generated by Backbone.js to uniquely identify models.
The output you get (with $el, el, events, etc.) is typical of a Backbone.js View.
$elis a jQuery-wrapped element representing the root element of the view.elis the raw DOM element.modellinks back to the associated model for this view.- The rest of the properties and methods are related to the functionalities and behaviors of the view.
In conclusion, the functions are doing exactly what they’re supposed to:
getEditorControlModelfetches the model of a control.getEditorControlViewfetches the view of a control.
And the outputs you’re seeing are Backbone.js Model and View instances, which Elementor uses to structure its controls in the editor.