【问题标题】:Manipulating datastore data after loading加载后操作数据存储数据
【发布时间】:2012-08-31 09:01:24
【问题描述】:

我有一个后端,它通过 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('')              
}
});

【问题讨论】:

    标签: sencha-touch-2 dataview datastore


    【解决方案1】:

    改为

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

    使用

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

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

    干杯,奥列格

    【讨论】:

      【解决方案2】:

      您只需要通知商店侦听器有关修改的字段。试试:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-13
        • 1970-01-01
        • 2018-10-03
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多