我添加了一个具有与相关产品类似功能的选项卡,我添加了一个带有如下下拉列表的列:
$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/