【问题标题】:Avoid syncing certain parts of a model避免同步模型的某些部分
【发布时间】:2025-12-18 22:10:02
【问题描述】:

假设我有一个像这样的 Sencha Touch 模型:

Ext.regModel('User', {
    'fields': [{
        'name': 'first_name',
        'type': 'string'
     }, {
        'name': 'last_name',
        'type': 'string'
     }, {
        'name': 'full_name',
        'type': 'string',
        'convert': function(v, record) {
            return record.data.first_name + ' ' + record.data.last_name;
        }
     }, {
        'name': 'age',
        'type': 'integer'
     }
]});

服务器在获取记录时返回“first_name”、“last_name”和“age”字段。但是,当我更新用户的名字和/或姓氏并在商店中调用 sync() 时,它会将所有字段发送到服务器,包括 full_name 和 age,即使我不希望这样。

我知道我可以忽略服务器上的数据,但在某些情况下(例如,有很多带有“转换”的字段)它会给负载增加很多不必要的开销。

【问题讨论】:

    标签: extjs sencha-touch extjs-mvc


    【解决方案1】:

    您是否尝试过该字段的配置persist: false

    编辑我想您可以为代理创建自己的编写器并覆盖getRecordData 方法。

    Ext.define('Ext.ux.NewWriter', {
        extend: 'Ext.data.Writer',
        getRecordData: function(record) {
            return {
                first_name: record.data.first_name,
                last_name: record.data.last_name,
                age: record.data.age
            };
        }
    });
    
    ...
    proxy: {
        writer: Ext.create('Ext.ux.NewWriter');
    }
    

    希望对你有帮助

    【讨论】:

    • 好像没有效果。此外,它没有在API docs 中列出(尽管我找不到任何可以使用的选项。)
    • 我正在查看 extjs 4 的 api :),其中字段的配置持续存在.. 显然在 sencha 中不可用
    • 哦,这实际上是个好消息:在某些时候,它会可用。在此期间,我会看看是否可以将其反向移植到 Sencha Touch。