0

ID の代わりに列に文字列をレンダリングしようとしています。私はこの解決策を確立しました:グリッドセルが間違ってレンダリングされていますが、動的ストアでは機能しません。

私のグリッドでは、レンダラーにロードするストアを配置しました。

columns: [
                  {xtype : 'gridcolumn', text: 'Id', dataIndex: 'id'},
                  {xtype : 'gridcolumn', text: 'Validade', dataIndex: 'dataValidade', renderer: function(object){return Ext.Date.format(object, 'd-m-Y');}},
                  {xtype : 'gridcolumn', text: 'Complexo', dataIndex: 'id', renderer: function(value) {
                        storeComplexoPorValidade.getProxy().url = caminhoContexto + "validade/complexoporid/" + value + "/dados.json";
                        storeComplexoPorValidade.load();
                        console.log(storeComplexoPorValidade);
                        var idx = storeComplexoPorValidade.find('id', value);
                        var rec = storeComplexoPorValidade.getAt(idx);
                        return rec.get('descricao');  
                        }
                  },

ただし、ストアはリクエストを実行しますが、データを var にロードしません。そして、エラーをキャッチします:未定義のメソッド「get」を呼び出すことはできません。

どうしたの?

4

2 に答える 2

1

ストアの読み込みが非同期であるため、エラーが発生しています。そのため、レンダラーからの「戻り」は、プロキシ要求の応答が受信され、処理され、使用可能になり、しようとしている変数に割り当てられる前に完了します。設定。

ここでアプローチを再考することをお勧めします。いくつかのオプション:

  1. グリッドを作成する前に、カスタム レンダリングに使用しようとしているストアをロードします。
  2. カスタム レンダリングを実行するために必要な追加のフィールドを使用して、グリッドのストアの基になるデータ モデルを拡張します。これらの追加フィールドはいつでも非永続としてマークできるため、モデル インスタンスで実行される可能性のある書き込みアクションには含まれません。
于 2013-01-27T17:47:21.930 に答える
0

スクリプトを機能させるために多くの作業が必要です。そして、あなたのヒントを参考にして、コードを機能させるのに役立つ他の 2 つのソリューションを作成しました。すべてのストアがExtJsにロードされるまで待つ方法は? およびhttp://www.sencha.com/forum/showthread.php?197265-Loading-stores-synchronously

私のコードは機能しています:

Ext.define('validade', {
extend: 'Ext.data.Model',
fields: [{name: 'id', type: 'int'},
         {name: 'dataValidade', type: 'date', dateFormat:'Y-m-d'},
         {name: 'complexo', type: 'string', persist: 'false' }]         

});

Ext.define('ValidadeStore',{
extend: 'Ext.data.Store',
model: 'validade',
pageSize: itemsPerPage,
remoteSort: true,
    sorters: [{
        property : 'id',
        direction: 'DESC'
    }],
proxy: {
    type: 'ajax',
    url : '/validade/grid/dados.json',
    reader : {
        type : 'json',
        root : 'data'
    },
},
autoLoad: {
    callback: function(records, operation, success){
        var i = 0

        loadComplexo();

        function loadComplexo(){
            if (i < records.length) {
                var rec = records[i];
                i++;
                storeComplexo.getProxy().url = "validade/complexoporid/" + rec.get('id') + "/dados.json";
                storeComplexo.load({
                    callback: function(records, operation, success){
                        var rec_ = records[0];
                        rec.set('complexo',rec_.get('descricao'));
                        loadComplexo();
                    }
                });
            }
        }
    }
}

});

どうもありがとう!

于 2013-02-06T17:24:35.900 に答える