Magento的UI对象层次结构中的Shadow Tabs是什么?

11

我在研究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标签页?还是说有其他更多的含义?


我不确定这是否算作答案,但与你所说的不同,似乎如果加载具有阴影选项卡的选项卡,则阴影选项卡将自动加载。因此,您只需加载A和B,C就会为您加载,而无需显式加载选项卡A、B、C?这只是一个快速浏览后的猜测。 - Tim Reynolds
1个回答

5
似乎意思是,每当绑定在一起作为shadowTabs的任何选项卡显示时,此组中的其他选项卡也将被呈现。
因此,不是“仅在渲染customer_options选项卡时才渲染bundle_item选项卡”,而是“每当渲染bundle_item选项卡或customer_options选项卡时,也要渲染另一个选项卡”。
不确定我是否喜欢“影子”的隐喻。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接