2

データストアがajaxプロキシを介して使用するJSONデータを返すバックエンドがあります。その後、データはデータビューに表示されます。私がする必要があるのは、データビューに表示される前に、クライアント側で受信したデータに対して何らかの変換を実行することです。

load私はさまざまなアプローチを試し、データストアのイベントにハンドラーをアタッチすることに決めました。

Ext.getStore('MyStore').on('load', function (store, records, successful, operation, eOpts) {         
    for (var i = 0; i < records.length; i++) {
        var e = records[i];
        e.data.myField = "constantPrefix" + e.data.myField;
    }
});

ハンドラーが起動し、レコードが正しく変更されます。

問題は、データビューに変更されていないデータが表示されることです。全体のアプローチは正しいですか?もしそうなら、なぜそれが機能しないのですか。そうでない場合-どのようにそれを達成しますか?

以下はデータビューコードです。

Ext.define('MyProject.view.MyDataView', {
extend : 'Ext.DataView',
xtype : 'my-dataview',

config : {      
    store : 'MyStore',
    baseCls : Ext.os.deviceType === 'Phone' ? 'my-dataview-phone' : 'my-dataview-tablet',
    mode: 'MULTI',
    allowDeselect: true,
    selectedCls: 'tick-visible',        
    triggerEvent: 'itemdoubletap',


    itemTpl : [
            '<img class="my-photo my-dataview-photo" src="',                        
            '{myField}"></img>'             
        ].join('')              
}
});
4

2 に答える 2

1

代わりは

 e.data.myField = "constantPrefix" + e.data.myField;

使用する

var value = "constantPrefix" + e.get('myField');
e.set('myField', value);

model.set()は、データビューがキャッチする必要なイベントをトリガーする役割を果たします。

乾杯、オレグ

于 2012-08-31T09:24:27.913 に答える
0

変更されたフィールドについてストアリスナーに通知する必要があります。試す:

Ext.getStore('MyStore').afterEdit(e, ['myField']);

これには、データビューまたはグリッドに変更されたフィールドが表示されるという利点があります(フィールドにこれらの赤い三角形が表示されます)。

于 2014-08-20T17:47:34.757 に答える