0

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

{
    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);
}

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

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

4

2 回答 2

0

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

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

于 2018-09-14T03:02:52.073 回答
0

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

于 2020-03-24T13:06:42.560 回答