【问题标题】:Magento select field disables row in related productsMagento 选择字段禁用相关产品中的行
【发布时间】:2013-01-01 02:47:01
【问题描述】:

我添加了一个功能类似于相关产品的选项卡,我添加了一个带有如下下拉列表的列:

$this->addColumn('mycolumn', array(
        'name' => 'mycolumn',
        'header' => Mage::helper('catalog')->__('Display on current child page'),
        'index' => 'mycolumn',
        'type' => 'select',
        'width' => '1',
        'align' => 'center',
        'options' => array(
        1 => Mage::helper('catalog')->__('Yes'),
        0 => Mage::helper('catalog')->__('No'),
    ),
        'editable' => true
    ));

每次我更改选择时,我的产品都会被取消选中并且该行被禁用。

我发现magento中注释了这一行:

     bindFieldsChange : function(){
        if (!$(this.containerId)) {
            return;
        }
 --->  //     var dataElements = $(this.containerId+this.tableSufix).down('.data tbody').select('input', 'select');
        var dataElements = $(this.containerId+this.tableSufix).down('tbody').select('input', 'select');
        for(var i=0; i<dataElements.length;i++){
            Event.observe(dataElements[i], 'change', dataElements[i].setHasChanges.bind(dataElements[i]));
        }
    }

我在 js/mage/adminhtml/grid.js 中找到了这段代码。 当我取消注释这一行时,我的下拉菜单就像一个魅力......

关于这个问题我有 2 个问题,第一个问题是取消注释是否安全(Magento 一定有理由改变它)。

我的第二个问题是如何在不调整 grid.js 文件的情况下避免这种行为。我不喜欢以任何方式编辑核心文件,但无法弄清楚如何重写此功能或如何以行为不适用的方式添加我的列。

【问题讨论】:

  • 问题解决了吗?看来如果你取消注释第一行,第二行会覆盖它,不是吗?

标签: magento grid adminhtml


【解决方案1】:

行点击事件使用一个名为“openGridRow”的函数

在您的网格中包含一些 javascript,并使用一些自定义代码添加此函数以在满足某些条件时取消事件。 然后将复选框设置回选中状态。

示例将是

function openGridRow(grid, event){
                var element = Event.findElement(event, 'tr');
                //alert(Event.element(event).tagName.toLowerCase());
                if(Event.element(event).type != 'checkbox'){
                  if(['img', 'a', 'input', 'select', 'option', 'img'].indexOf(Event.element(event).tagName.toLowerCase())!=-1) {
                      // re-enable the checkbox
                      var checkbox = Element.select(element, 'input');
                      if(checkbox[0] && !checkbox[0].disabled){
                          grid.setCheckboxChecked(checkbox[0], true);
                      }
                      return;
                  }
                }
                if(element.title){
                    setLocation(element.title);
                }
    }    

上面的例子什么都不做,如果点击的元素类型是a, input, select or option 其他一切都将照常进行。

【讨论】:

  • 不太清楚为什么你解决了这个问题,但它解决了! :) 我应该注意任何副作用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2016-06-04
  • 1970-01-01
相关资源
最近更新 更多