当我在商店中插入值时,Extjs 商店同步不起作用

Extjs store sync is not working when i insert value in store

我有带 widgetColumn 的 treePanel,其中包含带有默认文本的组合框小部件。我的要求是当我 select 默认文本时,应将一条新记录插入商店并保存在数据库中。

{
    text: 'TC',
    dataIndex: 'scrTC',
    xtype: 'widgetcolumn',
    widget: {
        xtype: 'combo',
        store: 'TCStore',
        valueField: 'id',
        displayField: 'name',
        matchFieldWidth: false,
        listeners: {
          select: 'selectDefault'
        }
    }
}

控制器方法:

selectDefault: function(combo){
  loadData(combo, id, name); //there is a logic to get id & name, then pass it to loadData method
}

loadData: function(combo, id, name){
   var store = combo.getStore();
  store.insert(0,{id: id, name: name});
  store.sync();
  combo.setValue(id);
}

问题是当我第一次 select 默认文本时,存储同步方法不是将数据插入数据库,而是组合显示新值并存储新值(使用调试器看到)。 当我再次 select 时,数据被插入到数据库中。

我调试了代码,执行流程是正确的,唯一的问题是同步不是第一次调用后端插入数据,而是第二次工作。 有人可以帮忙吗

商店将使用其代理与您的后端同步数据,因此请确保将其配置为您正在使用的后端类型。商店本身可能配置了代理,或者它可能默认使用其模型上的代理。没有看到商店配置,我不能肯定。

例如,如果您使用的是 REST 后端,则在商店配置的模型上使用 REST 代理:https://docs.sencha.com/extjs/6.6.0/modern/Ext.data.proxy.Rest.html

如果你给插入的记录分配id,同步认为它已经存在于数据库中并且不会触发添加事件(插入的记录不会得到幻像属性)。重命名 id 字段或将模型的 idProperty 设置为其他内容。