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.
1 Answer 1
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.
- 
 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>Magentonewb– Magentonewb2018年11月11日 06:58:15 +00:00Commented Nov 11, 2018 at 6:58
- 
 check updated answerRamkishan Suthar– Ramkishan Suthar2018年11月11日 07:01:37 +00:00Commented Nov 11, 2018 at 7:01
- 
 @Magentonewb Did it work for you?Ramkishan Suthar– Ramkishan Suthar2018年11月11日 09:12:56 +00:00Commented Nov 11, 2018 at 9:12
- 
 Sorry for the delay, I will now try it asap!Magentonewb– Magentonewb2018年11月11日 09:28:27 +00:00Commented Nov 11, 2018 at 9:28
- 
 welcome @Magentonewb, can you please upvote as well :)Ramkishan Suthar– Ramkishan Suthar2018年11月11日 09:42:21 +00:00Commented Nov 11, 2018 at 9:42