0

yui データ テーブル セルを参照して、インライン日付セル エディターの位置を ["tr", "br"] に設定したいと考えています。どうやってやるの?

この方法は機能しません -- column.editor.cfg.setProperty("context", [target, "tr", "br"])

4

2 に答える 2

1

データテーブルの doBeforeShowCellEditor メソッドをオーバーライドし、セル エディターのコンテキスト位置ロジックを変更しました。ほとんどのコードは、YUI basecelleditor の move 関数からコピーされています。 http://developer.yahoo.com/yui/docs/YAHOO.widget.BaseCellEditor.html

DataTable.doBeforeShowCellEditor = function(cellEditor){
   if(cellEditor.calendar){
      // Move Editor
      var elContainer = cellEditor.getContainerEl(),
      elTd = cellEditor.getTdEl(elContainer),
      x = d.getX(elTd),
      y = d.getY(elTd);
      //TODO: remove scrolling logic
      // SF doesn't get xy for cells in scrolling table
      // when tbody display is set to block
      if(isNaN(x) || isNaN(y)) {
        var elTbody = this.getTbodyEl();
        x = elTd.offsetLeft + // cell pos relative to table
          d.getX(elTbody.parentNode) - // plus table pos relative to document
          elTbody.scrollLeft; // minus tbody scroll
        y = elTd.offsetTop + // cell pos relative to table
          d.getY(elTbody.parentNode) - // plus table pos relative to document
          elTbody.scrollTop + // minus tbody scroll
          this.getTheadEl().offsetHeight; // account for fixed THEAD cells
      }
      cellEditor.show();
      //alert(x + " : X : width : " + elContainer.offsetWidth);
      x = x - elContainer.offsetWidth + elTd.offsetWidth;
      //alert(x + " : X");
      elContainer.style.left = x + "px";
      elContainer.style.top = y + "px";          
    }
    return true;
  };
于 2012-03-12T16:46:55.620 に答える
0

私はパーティーに遅刻していることを知っていますが、私は完全性が好きです...

Dheeraj Kumar Aggarwalのコードを出発点として使用して、「d」の定義を含むいくつかの改善を行いました。以下のコードは、セルエディタが画面の端から水平または垂直(あるいはその両方)に落ちた場合にのみ、セルエディタの位置を変更します。

objDataTable.doBeforeShowCellEditor = function(cellEditor){
    if(cellEditor.calendar){
        // Move Editor
        var d = YAHOO.util.Dom,
            elContainer = cellEditor.getContainerEl(),
            elTd = cellEditor.getTdEl(elContainer),
            x = d.getX(elTd),
            y = d.getY(elTd);
            numWindowWidth = d.getDocumentWidth();    /// The size of the browser frame
            numWindowHeight = d.getDocumentHeight();  /// The size of the browser frame
        //TODO: remove scrolling logic
        // SF doesn't get xy for cells in scrolling table
        // when tbody display is set to block
        if(isNaN(x) || isNaN(y)) {
            // console.log('this.getTbodyEl()',this.getTbodyEl(),'this',this);
            var elTbody = this.getTbodyEl();
            x = elTd.offsetLeft + // cell pos relative to table
                d.getX(elTbody.parentNode) - // plus table pos relative to document
                elTbody.scrollLeft; // minus tbody scroll
            y = elTd.offsetTop + // cell pos relative to table
                d.getY(elTbody.parentNode) - // plus table pos relative to document
                elTbody.scrollTop + // minus tbody scroll
                this.getTheadEl().offsetHeight; // account for fixed THEAD cells
        }
        cellEditor.show();
        //alert(x + " : X : width : " + elContainer.offsetWidth);
        if (x + elContainer.offsetWidth > numWindowWidth) {
            x = x - elContainer.offsetWidth + elTd.offsetWidth;
        }
        if (y + elContainer.offsetHeight > numWindowHeight) {
            y = y - elContainer.offsetHeight + elTd.offsetHeight;
        }
        //alert(x + " : X");
        elContainer.style.left = x + 'px';
        elContainer.style.top = y + 'px';
        // console.log('x',x,'y',y,'elContainer',elContainer);
    }
    return true;
};
于 2013-02-20T18:53:58.740 に答える