2

関連製品と同様の機能を備えたタブを追加しました。次のようなドロップダウンを備えた列を追加しました。

$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にはこれを変更する理由があったに違いありません)。

2番目の質問は、grid.jsファイルを調整せずにこの動作を回避する方法です。コアファイルの編集は嫌いですが、この機能を書き直す方法や、動作が適用されない方法で列を追加する方法を理解できません。

4

1 に答える 1

2

行クリックイベントは、「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の場合、上記の例は何もしません。それ以外は通常どおり続行されます。

于 2013-03-16T15:32:48.777 に答える