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

标签 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 中找到了这段代码。 当我取消注释这一行时,我的下拉菜单就像一个魅力......

关于此事我有两个问题,第一个问题是取消注释是否安全(Magento 一定有理由更改此设置)。

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

最佳答案

行单击事件使用名为“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 或 option,上面的示例将不会执行任何操作 其他一切都会照常进行。

关于Magento 选择字段禁用相关产品中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14381179/

相关文章:

php - Magento 描述/属性替换?

css - 尝试使用纯 CSS Flexbox 制作带装订线的 3 列网格

css - Bootstrap 列跳过两个地方

Magento 管理网格将数据从 Action 发送到 Controller

magento - 无法在Magento CE 1.9中编译rwd skin SCSS

Magento:获取指定语言的国家/地区名称

javascript - 如何将空行添加到 ExtJS 网格?

Magento 网格列排序

magento - 如何在magento中管理网格表单的下拉列表中设置默认值?

php - Magento::类别和子类别