Hello.
I am using ui component which triggers an Ajax call when a field "attribute_id" is changed.
However it does not trigger the Ajax call. It is called when the other field "attribute_value_id" is changed.
Do you have any suggestions to fix this issue?
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="provider" xsi:type="string">frontname_item_form.frontname_item_form_data_source</item>
<item name="deps" xsi:type="string">frontname_item_form.frontname_item_form_data_source</item>
</item>
<item name="label" xsi:type="string" translate="true">General</item>
<item name="layout" xsi:type="array">
<item name="type" xsi:type="string">tabs</item>
<item name="navContainerName" xsi:type="string">left</item>
</item>
<item name="buttons" xsi:type="array">
<item name="save" xsi:type="array">
<item name="name" xsi:type="string">save</item>
<item name="label" xsi:type="string" translate="true">Save</item>
<item name="class" xsi:type="string">primary</item>
<item name="url" xsi:type="string">*/*/save</item>
</item>
</item>
</argument>
<dataSource name="frontname_item_form_data_source">
<argument name="dataProvider" xsi:type="configurableObject">
<argument name="class" xsi:type="string">Vendor\Module\Ui\DataProvider</argument>
<argument name="name" xsi:type="string">frontname_item_form_data_source</argument>
<argument name="primaryFieldName" xsi:type="string">id</argument>
<argument name="requestFieldName" xsi:type="string">id</argument>
<argument name="collectionFactory" xsi:type="object">Vendor\Module\Model\ResourceModel\Item\CollectionFactory</argument>
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="submit_url" xsi:type="url" path="frontname/item/save"/>
</item>
</argument>
</argument>
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/form/provider</item>
</item>
</argument>
</dataSource>
<fieldset name="general">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">General</item>
</item>
</argument>
<field name="title">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Name</item>
<item name="dataType" xsi:type="string">text</item>
<item name="formElement" xsi:type="string">input</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">true</item>
</item>
</item>
</argument>
</field>
<field name="image">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">string</item>
<item name="source" xsi:type="string">Index</item>
<item name="label" xsi:type="string" translate="true">Image</item>
<item name="visible" xsi:type="boolean">true</item>
<item name="formElement" xsi:type="string">fileUploader</item>
<item name="elementTmpl" xsi:type="string">ui/form/element/uploader/uploader</item>
<item name="previewTmpl" xsi:type="string">Vendor_Module/image-preview</item>
<item name="required" xsi:type="boolean">false</item>
<item name="sortOrder" xsi:type="number">40</item>
<item name="uploaderConfig" xsi:type="array">
<item name="url" xsi:type="url" path="frontname/index/upload"/>
</item>
</item>
</argument>
</field>
<field name="attribute_id">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Vendor\Module\Model\Source\Myvalues</item>
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">text</item>
<item name="label" translate="true" xsi:type="string">Attribute</item>
<item name="component" xsi:type="string">Vendor_Module/js/form/element/options</item>
<item name="formElement" xsi:type="string">select</item>
<item name="sortOrder" xsi:type="number">210</item>
<item name="visibleValue" xsi:type="string">30</item>
</item>
</argument>
</field>
<field name="attribute_value_id" >
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Vendor\Module\Model\Source\Myvalues</item>
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">text</item>
<item name="label" translate="true" xsi:type="string">Attribute Value</item>
<item name="component" xsi:type="string">Vendor_Module/js/form/element/options</item>
<item name="formElement" xsi:type="string">select</item>
<item name="sortOrder" xsi:type="number">211</item>
</item>
<item name="visibleValue" xsi:type="string">20</item>
</argument>
</field>
<field name="description">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="label" xsi:type="string" translate="true">Description</item>
<item name="dataType" xsi:type="string">text</item>
<item name="formElement" xsi:type="string">input</item>
</item>
</argument>
</field>
</fieldset>
</form>option.js
define([
'jquery',
'underscore',
'uiRegistry',
'Magento_Ui/js/form/element/select',
'Magento_Ui/js/modal/modal',
'mage/url'
], function ($, _, uiRegistry, select, modal, url) {
'use strict';
return select.extend({
initialize: function () {
self = this;
this._super();
self.value.subscribe(function () {
self.updateValueOptions();
});
return this;
},
updateValueOptions: function () {
if(self.name != 'frontname_item_form.areas.general.general.attribute_value_id'){
return;
}
console.log(uiRegistry.get('index = attribute_id').value());
console.log(uiRegistry.get(self).value());
console.log(self.value());
if (self.value()) {
$.ajax({
url: '../../index/customajax',
type: 'post',
dataType: 'json',
cache: false,
showLoader: true,
data: {form_key: window.FORM_KEY, 'value':uiRegistry.get('index = attribute_id').value()}
}).
done(function (response) {
if (!response.error) {
console.log(response.array);
//console.log(uiRegistry.get('index = attribute_value_id').options());
uiRegistry.get('index = attribute_value_id').options(response.array);
}
});
}
else {
uiRegistry.get('index = attribute_value_id').options([]);
}
return true;
}
});
});