1

I've a backend grid that uses the UI component and itself works and shows up fine, but I can't get inline edit working. I've tried following a couple of tutorials and examples and I can't figure out what I'm missing here. Nothing happens when I click the supposedly editable column.

Here are some relevant snippets from my code:

UI component xml-file:

<columns name="spinner_columns">
 <selectionsColumn name="ids">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="editorConfig" xsi:type="array">
 <item name="selectProvider" xsi:type="string">vendor_module_threshold_listing.vendor_module_threshold_listing.spinner_columns.ids</item>
 <item name="enabled" xsi:type="boolean">true</item>
 <item name="indexField" xsi:type="string">threshold_id</item>
 <item name="clientConfig" xsi:type="array">
 <item name="saveUrl" xsi:type="url" path="vendor_module/threshold/inlineEdit"/>
 <item name="validateBeforeSave" xsi:type="boolean">false</item>
 </item>
 </item>
 <item name="childDefaults" xsi:type="array">
 <item name="fieldAction" xsi:type="array">
 <item name="provider" xsi:type="string">vendor_module_threshold_listing.vendor_module_threshold_listing.spinner_columns_editor</item>
 <item name="target" xsi:type="string">startEdit</item>
 <item name="params" xsi:type="array">
 <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
 <item name="1" xsi:type="boolean">true</item>
 </item>
 </item>
 </item>
 </item>
 </argument>
 </selectionsColumn>
...
<column name="threshold">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="editor" xsi:type="array">
 <item name="editorType" xsi:type="string">text</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 <item name="filter" xsi:type="string">text</item>
 <item name="label" xsi:type="string" translate="true">Threshold</item>
 </item>
 </argument>
 </column>

Vendor/Module/Controller/Adminhtml/Threshold/InlineEdit.php

<?php
namespace Vendor\Module\Controller\Adminhtml\Threshold;
class InlineEdit extends \Magento\Backend\App\Action
{
 protected $jsonFactory;
 public function __construct(
 \Magento\Backend\App\Action\Context $context,
 \Magento\Framework\Controller\Result\JsonFactory $jsonFactory
 ) {
 parent::__construct($context);
 $this->jsonFactory = $jsonFactory;
 }
 public function execute()
 {
 /** @var \Magento\Framework\Controller\Result\Json $resultJson */
 $resultJson = $this->jsonFactory->create();
 $error = false;
 $messages = [];
 $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/test.log');
 $logger = new \Zend\Log\Logger();
 $logger->addWriter($writer);
 $logger->info('inlineEdit triggered!');
 if ($this->getRequest()->getParam('isAjax')) {
 $postItems = $this->getRequest()->getParam('items', []);
 if (!count($postItems)) {
 $messages[] = __('Please correct the data sent.');
 $error = true;
 } else {
 foreach (array_keys($postItems) as $entityId) {
 /** load your model to update the data */
 $model = $this->_objectManager->create('Vendor\Module\Model')->load($entityId);
 try {
 $model->setData(array_merge($model->getData(), $postItems[$entityId]));
 $model->save();
 } catch (\Exception $e) {
 $messages[] = "[Error:] {$e->getMessage()}";
 $error = true;
 }
 }
 }
 }
 return $resultJson->setData([
 'messages' => $messages,
 'error' => $error
 ]);
 }
}

InlineEdit.php is never triggered by the way. Any ideas what's wrong/how to fix this? Help would be much appreciated.

asked Nov 11, 2018 at 6:44

1 Answer 1

0

Please update your xml file like below.

<columns name="spinner_columns">
 <settings>
 <editorConfig>
 <param name="clientConfig" xsi:type="array">
 <item name="saveUrl" xsi:type="url" path="vendor_module/threshold/inlineEdit"/>
 <item name="validateBeforeSave" xsi:type="boolean">false</item>
 </param>
 <param name="indexField" xsi:type="string">threshold_id</param>
 <param name="enabled" xsi:type="boolean">true</param>
 <param name="selectProvider" xsi:type="string">vendor_module_threshold_listing.vendor_module_threshold_listing.spinner_columns.ids</param>
 </editorConfig>
 <childDefaults>
 <param name="fieldAction" xsi:type="array">
 <item name="provider" xsi:type="string">task_listing.task_listing.task_columns_editor</item>
 <item name="target" xsi:type="string">startEdit</item>
 <item name="params" xsi:type="array">
 <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
 <item name="1" xsi:type="boolean">true</item>
 </item>
 </param>
 </childDefaults>
 </settings>
<selectionsColumn name="ids">
</selectionsColumn>
----
</columns>

All in all you need to keep these configurations outside of selectionColumn node. let me know if any further help needed.

answered Nov 11, 2018 at 6:50
5
  • The routename already matches the one that is declared in routes.xml, like so: <?xml version="1.0"?> <config xmlns:xsi="w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="admin"> <route id="vendor_module" frontName="vendor_module"> <module name="Vendor_Module"/> </route> </router> </config> Commented Nov 11, 2018 at 6:58
  • check updated answer Commented Nov 11, 2018 at 7:01
  • @Magentonewb Did it work for you? Commented Nov 11, 2018 at 9:12
  • Sorry for the delay, I will now try it asap! Commented Nov 11, 2018 at 9:28
  • welcome @Magentonewb, can you please upvote as well :) Commented Nov 11, 2018 at 9:42

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.