加载后操作数据存储区数据

时间:2012-08-31 09:01:24

标签: sencha-touch-2 dataview datastore

我有一个后端,它返回我的数据存储区通过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('')              
}
});

2 个答案:

答案 0 :(得分:1)

代替

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

使用

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

model.set()负责触发数据视图捕获的必要事件。

欢呼,奥列格

答案 1 :(得分:0)

您只需要通知商店听众有关已修改字段的信息。尝试:

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

这样做的好处是,数据视图或网格现在将显示已修改的字段(字段中包含这些红色三角形)。