【问题标题】:ExtJS - Overwrite default store dataExtJS - 覆盖默认存储数据
【发布时间】:2023-03-18 00:10:01
【问题描述】:

在 ExtJS 6.2 中,有一个包含一些默认数据的存储,我如何用数据库中的数据覆盖默认数据?

例子:

var store = Ext.create('Ext.data.Store', {
    fields: ['name', 'email', 'phone'],
    data: [{
        'name': 'Lisa',
        "email": "lisa@simpsons.com",
        "phone": "555-111-1224"
    }, {
        'name': 'Bart',
        "email": "bart@simpsons.com",
        "phone": "555-222-1234"
    }, {
        'name': 'Homer',
        "email": "home@simpsons.com",
        "phone": "555-222-1244"
    }, {
        'name': 'Marge',
        "email": "marge@simpsons.com",
        "phone": "555-222-1254"
    }],

    //idProperty: 'name',

    proxy: {
        type: 'ajax',
        url: 'data1.json',
        reader: {
            type: 'json',
            rootProperty: 'items',
            totalProperty: 'total'
        }
    }
});

然后,在我的数据库中,丽莎实际上有电话号码“555-111-4321”,所以当我拨打store.load() 时,它将用“555-111-4321”覆盖丽莎的电话号码。

请看小提琴:https://fiddle.sencha.com/#view/editor&fiddle/3h05

【问题讨论】:

  • 对不起,我不明白。您的小提琴会这样做,它首先使用默认数据加载,但很快它就会被 data1.json 中的数据替换。究竟需要什么?
  • @PeterKoltai 这不是为我替换数据,而是在加载更多数据,在网格中它将显示 2 个 Lisa,而不是更新后的电话号码。
  • 但是您的data1.json 本身包含两个 Lisas!所以当你加载它时,它会用两个 Lisas 替换网格内容,正如预期的那样。
  • @PeterKoltai 抱歉,我更新了小提琴。发生的情况是它从存储中删除所有内容并替换为 JSON 中的值,因此Homer 也被删除,我想添加新行(如果存在)并更新现有行,但不要删除任何行.

标签: javascript extjs model store


【解决方案1】:

可能有一个更优雅的解决方案,内置 ExtJS,但是在添加新行之前手动检查现有行并从原始存储中删除这些行。将这些行添加到小提琴代码的末尾:

newStore = Ext.clone(store);
newStore.load({addRecords: true,
    callback: function (records, operation, success) {
        if (!success) return;
        Ext.Array.each(records, function(record) {
           const existing = store.findRecord('name', record.get('name'));
           if (existing != null) {
               store.remove(existing);
           }
           store.add(record);
        });
    }
});

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多