0

グリッドを作成した直後に挿入された、2.0で正常に機能したコードのスニペットを次に示します。

var gridFilter = Ext.get(gridToolbar.addDom({ tag: "input", 
    type: "text", 
    size: "25", 
    value: "", 
    cls: "x-grid-filter"}).el);
gridFilter.on("focus", function(){this.dom.select();}); 

ここで、2番目のステートメントでJavaScriptエラーが発生します:「gridFilterisnull」。

3.0の下位互換性に関するいくつかの重要な警告を見逃しましたか?

これは、Ext JSサイトにあるサンプルコードを基に作成されたものであるため、ひどく難解なことをしているとは思いませんでした。

上記以外では、gridToolbarは正常に機能しており、最初の行のツールバーに追加されている入力フィールドがブラウザーに表示されます。したがって、コードを壊しているaddDom()またはExt.get()とは根本的に異なるものでなければならないと思います。

4

2 に答える 2

0

私はそれを再び機能させる方法を見つけました:

function getGridFilterBox(filterid, width, defaultvalue) {
    // Returns a basic filter box that can be used to filter a grid
    return {
        id: filterid,
        tag:    'input',
        type:   'text',
        size:   width || 25,
        value:  defaultvalue || '',
        cls:    'x-grid-filter'
        }
    }

function SetupGridFilter(filterid, gridToReload, ds) {
    // Sets up the keyboard and parameter filtering for a basic filter box on a grid toolbar
    var filter = Ext.get(filterid);
    filter.on('keyup', function(e) {
        var key = e.getKey(); // ENTER key filters, as does backspace or delete if the value is blank
        if((key== e.ENTER)||((key == e.BACKSPACE || key == e.DELETE) && this.getValue().length == 0)) { reloadGrid(gridToReload); }
        });
    filter.on('focus', function(){this.dom.select();}); // setup an onfocus event handler to cause the text in the field to be selected
    ds.on('beforeload', function() { ds.baseParams.searchPhrase = filter.getValue(); });
    }

次に、別の場所で、Viewport 仕様の途中で:

thisGrid = new Ext.grid.GridPanel({
   tbar: new Ext.Toolbar({items: ["-",
       getGridFilterBox("myfilter")] }),
   })

最後に、ビューポートの後:

thisGrid.show();
SetupGridFilter("myfilter", thisGrid, gridData);
于 2009-07-31T15:45:00.893 に答える
0

あなたのコードのすべてを見ることができないので、addDom() を呼び出す前にツールバーをレンダリングする必要があること、およびコードが Ext2 で「偶然に」機能したことをコードが尊重していないことが推測されます。このバージョンの非互換性の理由は、ext のバージョン間でレンダリングがどのように変更されたかにある可能性があります。Ext2 でレンダリングされたものは、Ext3 ではまだレンダリングされていない可能性があります。

試すことができる修正例:

gridToolbar.on("render", function() {

    var gridFilter = Ext.get(gridToolbar.addDom({ tag: "input", 
        type: "text", 
        size: "25", 
        value: "", 
        cls: "x-grid-filter"}).el);

    gridFilter.on("focus", function(){this.dom.select();});

});
于 2009-07-28T12:11:52.527 に答える