Magento选择字段禁用相关产品中的行

时间:2013-01-17 14:24:59

标签: magento grid adminhtml

我添加了一个功能类似于相关产品的标签,我添加了一个带有下拉列的列:

$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文件的情况下避免此行为。我不喜欢以任何方式编辑核心文件,但我无法弄清楚如何重写此功能或如何以行为不适用的方式添加我的列。

1 个答案:

答案 0 :(得分:2)

行点击事件使用名为&#39; openGridRow&#39;

的功能

在您的网格中加入一些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或option,则上面的示例将不执行任何操作 其他任何东西都会按照正常情况继续。