{"record":{"id":"754d59082cac1036","repo":"octobercms/october","slug":"a-row-is-not-found-for-the-updated-data","errorCode":null,"errorMessage":"A row is not found for the updated data","messagePattern":"A row is not found for the updated data","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"modules/backend/assets/foundation/controls/inspector/inspector.editor.objectlist.js","lineNumber":329,"sourceCode":"    ObjectListEditor.prototype.disposeInspector = function() {\n        $.oc.foundation.controlUtils.disposeControls(this.popup.querySelector('[data-inspector-container]'))\n        this.currentRowInspector = null\n    }\n\n    ObjectListEditor.prototype.applyDataToRow = function(row) {\n        if (this.currentRowInspector === null) {\n            return\n        }\n\n        var data = this.currentRowInspector.getValues()\n        row.setAttribute('data-inspector-values', JSON.stringify(data))\n    }\n\n    ObjectListEditor.prototype.updateRowText = function(property, value) {\n        var selectedRow = this.getSelectedRow()\n\n        if (!selectedRow) {\n            throw new Exception('A row is not found for the updated data')\n        }\n\n        if (property !== this.propertyDefinition.titleProperty) {\n            return\n        }\n\n        value = $.trim(value)\n\n        if (value.length === 0) {\n            value = '[No title]'\n            $.oc.foundation.element.addClass(selectedRow, 'disabled')\n        }\n        else {\n            $.oc.foundation.element.removeClass(selectedRow, 'disabled')\n        }\n\n        selectedRow.firstChild.textContent = value\n    }","sourceCodeStart":311,"sourceCodeEnd":347,"githubUrl":"https://github.com/octobercms/october/blob/b608633a7e8922487d91a8161499020121c3b3bf/modules/backend/assets/foundation/controls/inspector/inspector.editor.objectlist.js#L311-L347","documentation":"The client-side PageLookupWidget requires an `alias` option because it builds its AJAX handler names from it (`this.config.alias + '::onRefreshReference'`, `alias::onInsertReference`) so the popup can talk back to the server-side PageLookup widget. The constructor normalizes config through getConfig and immediately throws this Error when `alias` is still null (it defaults to null in DEFAULTS).","triggerScenarios":"Calling `$.oc.pageLookup.popup({...})` (or `new $.oc.pageLookup(...)`) with no `alias` key, or with `alias: null`/`alias: ''`-equivalent value. Any custom code that opens the page lookup popup without copying the widget alias from the server.","commonSituations":"Opening the lookup popup from a custom button or RichEditor form widget integration and forgetting the alias; refactoring config objects and dropping the alias key; mismatched docs example.","solutions":["Pass `alias` in the popup config: `$.oc.pageLookup.popup({ alias: 'pagelookup', ... })`.","Use the same alias as the server-side PageLookup widget rendered on the page (the `alias` you gave the PHP widget, e.g. 'pagelookup'), so `alias::onInsertReference` resolves.","If you render the widget yourself in PHP, pass its alias through to JS: `alias: <?= $this->getSelectFormWidget(...) ?>` equivalent or `<?= $widget->alias ?>`."],"exampleFix":"// before\n$.oc.pageLookup.popup({\n    value: 'cms-page::about/team'\n});\n\n// after\n$.oc.pageLookup.popup({\n    alias: 'pagelookup',\n    value: 'cms-page::about/team'\n});","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"// Guard before opening the popup\n/**\n * @param {{ alias?: string|null }} config\n * @returns {boolean}\n */\nfunction hasLookupAlias(config) {\n    return config != null\n        && typeof config.alias === 'string'\n        && config.alias.trim().length > 0;\n}\n\nif (!hasLookupAlias(cfg)) {\n    throw new Error('pageLookup requires config.alias matching the server widget alias');\n}\n$.oc.pageLookup.popup(cfg);","tryCatchPattern":"try {\n    $.oc.pageLookup.popup(cfg);\n} catch (e) {\n    if (/alias/.test(e.message)) {\n        // re-open with alias copied from the PHP widget, e.g. 'pagelookup'\n    }\n}","preventionTips":["Always pass alias in the popup config; copy it from the server-side PageLookup widget's alias property.","Centralize popup creation in one helper so the alias cannot be forgotten.","Remember the alias routes AJAX as `alias::onRefreshReference` / `alias::onInsertReference`."],"tags":["javascript","october-cms","pagelookup","widget-config","popup"],"backgroundTag":"missing-required-option","analyzedSha":"b608633a7e8922487d91a8161499020121c3b3bf","analyzedAt":"2026-08-21T04:24:57.515Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}