几天来,我一直在为此苦苦挣扎...对于管理员扩展,我正尝试使用Ajax加载uiComponent以便在选项卡中显示。uiComponent已正确加载,但似乎未由客户端敲除逻辑完全处理。
namespace Man4x\MondialRelay2\Block\Adminhtml\Shipping;
class Tabs
extends \Magento\Backend\Block\Widget\Tabs {
protected function _construct()
{
parent::_construct();
$this->setId('mondialrelay2_shipping_tabs');
$this->setDestElementId('container');
$this->setTitle(__('MondialRelay'));
}
protected function _beforeToHtml()
{
$this->addTab(
'mass_shipping',
[
'label' => __('Mass Shipping'),
'title' => __('Mass Shipping'),
'url' => $this->getUrl('*/*/massshipping', ['_current' => true]),
'class' => 'ajax'
]
);
return parent::_beforeToHtml();
}
}
Run Code Online (Sandbox Code Playgroud)
这是简单的控制器布局:
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<container name="root" label="Root">
<uiComponent name="mondialrelay2_massshipping_grid"/>
</container>
Run Code Online (Sandbox Code Playgroud)
注意:以标准方式(即非AJAX)加载时,此自定义uiComponent可以完美地发挥功能
跟踪AJAX响应时,我可以看到已为uiComponent加载了正确的HTML代码(包括Magento特定的“ x-magento-init”标签)。然后由jquery-ui回调处理:
this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
// support: jQuery <1.8
// jQuery <1.8 returns false …
Run Code Online (Sandbox Code Playgroud)