我在研究Magento的内部结构,发现在小部件/选项卡渲染层级中有一个叫做影子选项卡的概念,我对其还不是很清楚。当您为表单定义选项卡时,可以将其绑定为影子选项卡。
protected function _prepareLayout()
{
parent::_prepareLayout();
$this->addTab('bundle_items', array(
'label' => Mage::helper('bundle')->__('Bundle Items'),
'url' => $this->getUrl('*/*/bundles', array('_current' => true)),
'class' => 'ajax',
));
$this->bindShadowTabs('bundle_items', 'customer_options');
}
bindShadowTabs
方法是使用文档中的影子选项卡。
/**
* Mark tabs as dependent of each other
* Arbitrary number of tabs can be specified, but at least two
*
* @param string $tabOneId
* @param string $tabTwoId
* @param string $tabNId...
*/
public function bindShadowTabs($tabOneId, $tabTwoId)
利用 PHP 对象的 JavaScript 如下所示:
showTabContentImmediately : function(tab) {
this.hideAllTabsContent();
var tabContentElement = $(this.getTabContentElementId(tab));
if (tabContentElement) {
Element.show(tabContentElement);
Element.addClassName(tab, 'active');
// load shadow tabs, if any
if (tab.shadowTabs && tab.shadowTabs.length) {
for (var k in tab.shadowTabs) {
this.loadShadowTab($(tab.shadowTabs[k]));
}
}
if (!Element.hasClassName(tab, 'ajax only')) {
Element.removeClassName(tab, 'notloaded');
}
this.activeTab = tab;
}
if (varienGlobalEvents) {
varienGlobalEvents.fireEvent('showTab', {tab:tab});
}
},
从最初的阅读中,我并不完全清楚将一个标签页“依赖”于另一个标签页的含义是什么。这是否只是简单地在渲染customer_options
标签页时才渲染bundle_item
标签页?还是说有其他更多的含义?